C#调C++写的DLL函数,出现“堆栈不对称“错误

问题描述

错误信息:其他信息:对PInvoke函数“hk9600sdkTest!hk9600sdkTest.IVMS9600SDK::HikPt_StartPlayView”的调用导致堆栈不对称。原因可能是托管的PInvoke签名与非托管的目标签名不匹配。请检查PInvoke签名的调用约定和参数与非托管的目标签名是否匹配c++:typedefvoid(__stdcall*pStreamCallback)(longlSession,intiStreamType,constchar*data,intdataLen,void*pUser);HIKPT_EXTERNlongHIKPT_APIHikPt_StartPlayView(constchar*szCameraIndexCode,void*hWnd,pStreamCallbackpFun,void*pUserData);c#:声明publicdelegatevoidpStreamCallback(intlSession,intiStreamType,stringdata,intdataLen,IntPtrpUser);//实时流回调函数[DllImport(@"HikPlatformSDK.dll",CallingConvention=CallingConvention.StdCall)]//,CharSet=CharSet.UnicodepublicstaticexternintHikPt_StartPlayView(stringszCameraIndexCode,IntPtrhWnd,pStreamCallbackpFun,IntPtrpUserData);调用stringcamercode="11100095001310000003";preHand=IVMS9600SDK.HikPt_StartPlayView(camercode,panel1.Handle,null,IntPtr.Zero);MessageBox.Show(preHand.ToString());更换了调用方式和字符集都没有效果,在线急等

解决方案

解决方案二:
__stdcall
解决方案三:
[UnmanagedFunctionPointer(CallingConvention.StdCall)]publicdelegatevoidpStreamCallback(intlSession,intiStreamType,stringdata,intdataLen,IntPtrpUser);

解决方案四:
@"HikPlatformSDK.dll",这个是不是多余preHand=IVMS9600SDK.HikPt_StartPlayView(camercode,panel1.Handle,null,IntPtr.Zero);其中IVMS9600SDK是一个对象,还是一个静态类?这句似乎是直接调用publicstaticexternintHikPt_StartPlayView(stringszCameraIndexCode,IntPtrhWnd,pStreamCallbackpFun,IntPtrpUserData);

时间: 2024-12-22 17:47:28

C#调C++写的DLL函数,出现“堆栈不对称“错误的相关文章

java调用delphi写的DLL报错误签名错

问题描述 如题,但并不是每次都报错,只是偶尔.函数参数我只有两个,都是字符串类型:Java这边我定义为string类型,delphi的dll里我定义为widestring类型错误显示为:错误签名AppName:javaw.exeAppVer:6.0.160.1ModName:adsloc32.dllModVer:5.60.0.0Offset:00030b00我写的delphidll里面调用了adsloc32.dll.补充:我用的开发工具是eclipse,delphi3写的DLL. 解决方案 解决

在C#中使用C/C++写的DLL

c++ 在C#中使用C/C++写的DLL 呵呵..,又到了我有想写点东西的时候了.最近在论坛老是看见有朋友问 C/C++的程序如何在C#中使用?其实这是个很不错的想法.代码复用.不过 托管程序如何使用非托管代码呢?想想看,很自然就联想到了DLL动态连接库 把C/C++的代码编译成DLL,然后使用,这里我假设我的C/C++代码里包含一个 函数,叫average(int av[]) 申明如下:extern "C" __declspec(dllexport) __cdecl int aver

关于asp.net调用pb写的dll问题

问题描述 关于asp.net调用pb写的dll问题 现在asp.net调用pb写的dll我将dll放到bin目录然后添加引用,初始化的时候查看有哪些接口的时候报错出现死循环这里出现函数求值超时,谁遇到过这种情况求大神们指导. 解决方案 Asp.NET调用C++写的dllAsp.NET调用C++写的dllasp.net调用C++的dll 解决方案二: com对象本身是否有问题,先用activex control test container测试. 解决方案三: 如果winform可以调用的话,估计

VB怎么自己写一个MSGBOX函数,定时关闭自己,并且可以选择一个默认的命令?

问题描述 VB怎么自己写一个MSGBOX函数,定时关闭自己,并且可以选择一个默认的命令? VB怎么自己写一个MSGBOX函数,定时关闭自己,并且可以选择一个默认的命令? 解决方案 方法一: 自己建一个窗体,通过showmodal方式模拟弹出窗口,这个是最简单的. 方法二: moduls.pas Option Explicit Private Declare Function timeSetEvent Lib "winmm.dll" (ByVal uDelay As Long, ByVa

C#调用C++写的dll,C++调用C++的dll

C#语言使用方便,入门门槛较代,上手容易,并且语法与C,java有很类似的地方,IDE做的也好,通用性好,是MS下一代开发的主要力量.但是其开源代码较少,类库不是十分完美,在架构方面还有一些需要做的工作. C++写的程序占用内存较小,直接对内存或者文件操作,因此一些关键的步骤或者一些最内层的循环在一定程序上还需要依赖C++. 下面我做一些简单的例子 第一步,用C++做一个可以导出函数的dll(不采用def文件) cxyMath.h //在这里定义导出哪一些函数   class MyMathFun

c#-求助,请问,E写的DLL被C#调用就报错是为什么?

问题描述 求助,请问,E写的DLL被C#调用就报错是为什么? 求助,请问,E写的DLL被C#调用就报错是为什么? 传参弹窗的那种DLL 解决方案 贴出你的函数原型,看看C#这里声明的对不对. 解决方案二:

c#调用pb写的dll无法正常调用

问题描述 c#调用pb写的dll无法正常调用 现在c#调用pb写的dll,我用winform可以正常调用而用webform调用显示找不到函数的入口,请问大神们怎么解决这个问题 解决方案 两者加载dl 的路径,以及依赖项有区别吧. webform在浏览器上,路径等不是本地路径.还有权限控制等也要考虑

C#调用c写的dll 出现:尝试读取或写入受保护的内存。这通常指示其他内存已损坏

问题描述 求助各位大神!我最近在用C#封装一个C写的dll,在调dll中的方法时,时不时会报"尝试读取或写入受保护的内存.这通常指示其他内存已损坏".出现这样的问题,重启下机器就会好了,不过这也不是解决方案,继续大神帮我看看,如何才能杜绝这个问题.char*__readPeopleInfo_json()这个是C写的dll中的方法定义下面是C#引用及调用的代码[DllImport("HealthyCarder.dll")]publicstaticexternIntPt

C#如何调用一个DELPHI写的dll

问题描述 兄弟们我有个问题请教一下:我用C#调用一个DELPHI写的dll,dll中有integer,pchar,single数据类型,integer和single类型都能读出来就是读pchar类型有问题,这个函数是个读卡函数,调用会报这个错"对PInvoke函数"WindowsApplication1!WindowsApplication1.mz_读医保卡::Freadcard"的调用导致堆栈不对称.原因可能是托管的PInvoke签名与非托管的目标签名不匹配.请检查PInv