2

C# で C++ ネイティブ dll メソッドをインポートしました。以下は、C++ メソッドがどのように見えるかです

extern "C" declspec(dllexport) int __stdcall temp(char *value)
{
  value="hksdhfs";
  return 1;
}

これは私がC#でインポートした方法です

[DllImport("check.dll", CallingConvention = CallingConvention.StdCall, ExactSpelling = true, EntryPoint = "temp")]
    public static extern int temp(string value);

問題は、「値」char ポインターを介してデータを C++ dll に送信できることですが、「値」char ポインターを C# に戻すときに値が変更されないことです。誰でも助けてください。

4

1 に答える 1

0

この場合、引数が機能しないため、以下のように c++ dll メソッドの戻り値の型を変更し、記述された形式で文字列を取得します

extern "C" declspec(dllexport) char* __stdcall temp(char *value)
{
  value="hksdhfs";
  return value;
}

dllのインポートは次のようになります

[DllImport("check.dll", CallingConvention = CallingConvention.StdCall, ExactSpelling = true, EntryPoint = "temp")]
[return:MarshalAs(UnmanagedType.LPStr)]
public static extern string temp(string value);

strcpy() を実行しても機能しますが、クラスを使用している場合、このポインター文字値が渡されると機能しないため、上記の方法を優先し、機能しました... ありがとうございます。

于 2012-06-12T17:42:45.653 に答える