C#中使用DllImport调用C++的DLL方法.C++方法中有指针函数要如何避免
C#中使用DllImport调用C++的DLL方法.C++方法中有指针函数要如何处理.
C#中使用DllImport调用C++的DLL方法.C++方法中有指针函数要如何处理.
按照网上说法.C++中的函数指针在C#中只要使用委托就可以了.为什么我这里抛出了异常,是C#中定义方法与C++的方法签名错误,还是我委托的签名错误了,本人不会C++.
错误如下.
对 PInvoke 函数“WpfApplication!WpfApplication.MainWindow::CAAS_NtyRecvReg”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
------解决方案--------------------
代码没看出什么不对的地方
请关注下面2个地方
1.C++编译的是多字节的还是双字节的(Unicode)
2.编译的平台是x86还是x64
------解决方案--------------------
C#中使用DllImport调用C++的DLL方法.C++方法中有指针函数要如何处理.
/*C++方法*/
CAAS_SYS_API CAAS_INT CAAS_NtyRecvReg(PFN_CAAS_NTY_ON_RECV pfnNtyOnRecv, CAAS_CHAR *pcNtyName);
/*C++方法的相关定义*/
typedef void CAAS_VOID;
typedef CAAS_VOID (*PFN_CAAS_NTY_ON_RECV)(CAAS_XBUFID zBufId);
typedef void *CAAS_XBUFID;
typedef char CAAS_CHAR;
[DllImport(@"caas_sys.dll", CharSet = CharSet.Ansi, EntryPoint = "CAAS_NtyRecvReg")]
public static extern int CAAS_NtyRecvReg(delegate_PfnNtyOnRecv pfnNtyOnRecv, StringBuilder zBufId);
public delegate void delegate_PfnNtyOnRecv(System.IntPtr str);
public void pfnNtyOnRecv(IntPtr val)
{
MessageBox.Show("Hello");
}
/*调用*/
private void button1_Click_1(object sender, RoutedEventArgs e)
{
StringBuilder zBufId = new StringBuilder();
CAAS_NtyRecvReg(pfnNtyOnRecv, zBufId);
}
按照网上说法.C++中的函数指针在C#中只要使用委托就可以了.为什么我这里抛出了异常,是C#中定义方法与C++的方法签名错误,还是我委托的签名错误了,本人不会C++.
错误如下.
对 PInvoke 函数“WpfApplication!WpfApplication.MainWindow::CAAS_NtyRecvReg”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
------解决方案--------------------
代码没看出什么不对的地方
请关注下面2个地方
1.C++编译的是多字节的还是双字节的(Unicode)
2.编译的平台是x86还是x64
------解决方案--------------------