Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用C#/.NET代码编写非托管DLL_C++_Pinvoke_Dll - Fatal编程技术网

C++ 用C#/.NET代码编写非托管DLL

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++函数

我需要在本机代码中实现应用程序逻辑的一小部分。 为了测试PNECKE功能,我用一个非托管C++ Win32 DLL和一个使用PinCKE消耗DLL函数的WPF项目创建了一个简单的解决方案。 我遇到的问题是,我收到关于“堆栈不平衡”和“可能的签名不匹配”的异常

这是我的密码:

< P > 1 C++(DLL)

代码引发异常,声明“这可能是因为托管PInvoke签名与非托管目标签名不匹配。请检查PInvoke签名的调用约定和参数是否与目标非托管签名匹配。


我的错误在哪里?

< 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)