调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配
2017-11-23 19:01
375 查看
调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配用c#调用视频接口相关的dll,dll使用c++开发。c++接口定义如下:
PLATFORM const char* Plat_GetValueStr(const char* propertyName, int iUserHandle);c#接口定义如下:
[DllImport(@"Platform.dll", EntryPoint = "Plat_GetValueStr", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] extern static IntPtr Plat_GetValueStr(string propertyName, int iUserHandle);遇到的问题及解决方法:1、在c#调用时一开始 CharSet = CharSet.Ansi 没有定义 出现过乱码。c++中的编码为ansi,c#默认可能是Unicode。这里需要注意一下。2、对于c++ 返回值类型为 const char* 我一开始用String 接收,在framework4.0下也成功过,但有时成功,有时失败。在framework2.0下,从来没成功过。后来改用指针接收,成功接收了。
IntPtr ipName = Plat_GetValueStr(ConstControlUnit.ControlUnitName, iUserHandle); ResName= Marshal.PtrToStringAnsi(ipName);
这个也可以:在dllimport中加入CallingConvention参数就行了,[DllImport(PCAP_DLL, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)] 详见:http://blog.csdn.net/cui3525/article/details/6674478
相关文章推荐
- C# DllImport“调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配 ”
- 调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配
- 调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配
- 解决:C# DllImport“调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配 ”
- 调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配
- VB调用VC++的DLL问题:原因可能是托管的PInvoke 签名与非托管的目标签名不匹配。请检查PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
- 函数调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。
- C# 调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配
- 调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配
- 【错误】函数调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。
- C# 调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配
- 调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配
- C# 调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配
- 函数调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。
- C#调用C DLL:调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配
- 函数调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。
- C# 调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配
- 函数调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。
- C# 调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配