本人没用过VC,今天需要用VC6做个DLL来替代别人写的一个DLL,它里面有一个函数A,
A中有3个参数,使用C#调用的时候,可以这样写
[DllImport("ZZ.dll")]
static extern int A(int num1, out int num2, ref string str1);
我参照上面的写法,写的DLL里A是这样写的
.cpp文件:
ZZ_API int A(int num1,int &num2,string &str1)
{
//Code
}
.h文件:
ZZ_API int A(int,int &,string &);
编译是能通过的,但我用C#写的那个程序去调用却提示出错:
对 PInvoke 函数“Test!Test.Form1::A”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
哪位仁兄能指导一下?
签名不匹配啊
[DllImport("ZZ.dll")]
static extern int A(int num1, out int num2, ref string str1);
ZZ_API int A(int,int& ,string &);是不能匹配的,如果想返回多个值,建议封装一个类,返回这个类
目前的P/Invoke对于STL 的string类型不支持,这个类型有些复杂,具体的你可以看看P/Invoke的文档