当前位置:编程学习 > C#/ASP.NET >>

C#中调用C++写的dll函数,报托管签名和非托管目标签名错误

C#中调用C++写的dll,报错对 PInvoke 函数“ConsoleApplication3!ConsoleApplication3.Program::Add”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
但输出结果是正确的。
这是C++dll文件的源码

#ifndef TestDll_H_
#define Test_H_
#ifdef MYLIBDLL
#define MYLIBDLL extern "C" _declspec(dllimport)
#else
#define MYLIBDLL extern "C" _declspec(dllexport)
#endif
MYLIBDLL int Add(int plus1, int plus2);
#endif
#include "stdafx.h"
#include <iostream>
using namespace std;
int Add(int plus1, int plus2)
{
int add_result = plus1 + plus2;
return add_result;
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;

namespace ConsoleApplication3
{
    class Program
    {
        [DllImport("MyDLL.dll")]
        public static extern int Add(int a, int b);
        static void Main(string[] args)
        {
            Console.WriteLine("a+b=" + Add(30, 30));
            Console.ReadLine();
        }
    }
}

刚开始学这个不太懂 --------------------编程问答-------------------- 加入调用方式修饰
__stdcall或者是__cdcall
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,