【发布时间】:2012-06-04 13:35:08
【问题描述】:
在 c++ 中,我要导出的方法是:
__declspec(dllexport) int __thiscall A::check(char *x,char *y,char *z)
{
temp=new B(x,y,z);
}
在 c# 中我像这样导入这个方法:
[DllImport("IDLL.dll", CallingConvention=CallingConvention.ThisCall, ExactSpelling = true, EntryPoint = "check")]
public static extern int check(string x, string y, string z);
我在 c# 中像这样调用这个方法并传递值:
public int temp()
{
string x="sdf";
string y="dfggh";
string z="vbnfg";
int t;
t=Class1.check(x,y,z);
return t;
}
问题是,当我调试本机代码时,我看到参数 x、y、z 的值为 sdf、dfggh、vbnfg,并且在它们到达 c++ dll 时甚至在它进入本机 c++ 之前就被更改了dll方法。
x=dfggh,y=vbnfg,z=null value
并且给我一个错误,说空指针值被传递给函数。谁能帮我解决这个奇怪的问题。
【问题讨论】:
-
刚刚看过我几年前写的一些代码。尝试在每个
string参数之前添加[MarshalAs(UnmanagedType.LPStr)]。UnmanagedType.LPStr表示 指向以空字符结尾的 ANSI 字符数组的指针。 -
是不是只有z变成了null,x和y都没有问题?如果是,则检查 B 的 ctor 中修改 z 的那些部分。
-
@kol --- 甚至在进入构造函数 B 本身之前,值正在被更改。
-
@hmjd ---我尝试了你提到的但有同样的问题。
标签: c# c++ visual-c++ c#-4.0