在C++中,我導出方法是:數據值beeing複製到其他參數C++,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;
}
的問題是,當我調試到NAT ive代碼我發現參數x,y,z的值爲sdf,dfggh,vbnfg,並且在它們進入本機C++ dll方法之前,在它們到達C++ dll時會被更改。
x=dfggh,y=vbnfg,z=null value
並給我的錯誤說空指針值傳遞給函數。任何人都可以幫助我解決這個奇怪的問題。
只是看了一下一些代碼,我幾年前寫的。嘗試在每個'string'參數之前添加'[MarshalAs(UnmanagedType.LPStr)]'。 'UnmanagedType.LPStr'表示_指向ANSI字符_的空終止數組的指針。 – hmjd
這是真的,只有z變成了零,並且x和y沒有問題?如果是,那麼檢查B修改z的那些部分。 – kol
@kol ---甚至在進入構造函數B本身之前,值正在改變。 – krishna555