C++ 用C#/.NET代码编写非托管DLL
我需要在本机代码中实现应用程序逻辑的一小部分。 为了测试PNECKE功能,我用一个非托管C++ Win32 DLL和一个使用PinCKE消耗DLL函数的WPF项目创建了一个简单的解决方案。 我遇到的问题是,我收到关于“堆栈不平衡”和“可能的签名不匹配”的异常 这是我的密码: < P > 1 C++(DLL) 代码引发异常,声明“这可能是因为托管PInvoke签名与非托管目标签名不匹配。请检查PInvoke签名的调用约定和参数是否与目标非托管签名匹配。”C++ 用C#/.NET代码编写非托管DLL,c++,pinvoke,dll,C++,Pinvoke,Dll,我需要在本机代码中实现应用程序逻辑的一小部分。 为了测试PNECKE功能,我用一个非托管C++ Win32 DLL和一个使用PinCKE消耗DLL函数的WPF项目创建了一个简单的解决方案。 我遇到的问题是,我收到关于“堆栈不平衡”和“可能的签名不匹配”的异常 这是我的密码: < P > 1 C++(DLL) 代码引发异常,声明“这可能是因为托管PInvoke签名与非托管目标签名不匹配。请检查PInvoke签名的调用约定和参数是否与目标非托管签名匹配。” 我的错误在哪里?< P>解决:在C++函数
我的错误在哪里?
< P>解决:在C++函数定义中,我好像忘记了“.STDCALD关键字”,应该是:<代码>extern "C" __declspec(dllexport) int add(int a, int b)
这个问题是用C++名字来处理的。如果没有extern“C”
,名称将被损坏,并且C#DLL无法找到它
public partial class MainWindow : Window
{
[DllImport("MyLibrary.dll")]
static extern int add(int a, int b);
public MainWindow()
{
InitializeComponent();
}
private void btnVersion_Click(object sender, RoutedEventArgs e)
{
var res = add(3,2);
}
}
extern "C" __declspec(dllexport) int add(int a, int b)