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
そして、nullポインタ値が関数に渡されたというエラーが表示されます。誰かがこの奇妙な問題を解決するのを手伝ってくれますか?