0

私は C++ で書かれた DLL を持っています。この DLL には構造があります。

typedef struct TransmitData
{
wchar_t    szPath[MAX_PATH];
DWORD      dwResult;
} *lpTransmitData;

そして、この構造体を満たす関数が 1 つあります。

extern "C" __declspec(dllexport) int GetData(struct TransmitData &data)
{
//I HAVE ONE THE SAME STRUCT IN THIS DLL
memcpy(&data, &transmitData, sizeof(struct TransmitData));
return ret_value;
}

C# プログラムでは、単純なデータ型の関数をよく使用しますが、構造体では機能しません。C# にコードがあります:

public struct TransmitData
{
[MarshalAs(UnmanagedType.LPWStr, SizeConst = 260)] //260 = MAX_PATH
public string szPath;
public uint dwResult;
}
//...
[DllImport("MyDLL")]
public static extern int GetData(ref TransmitData data);

私は何を間違っていますか?ありがとう!

4

1 に答える 1

1

交換することをお勧めします

[DllImport("MyDLL")]

[DllImport("MyDLL", CallingConvention = CallingConvention.Cdecl)]

extert "C"

extern "C"

さらに、ジョーが提案したように、追加します

[StructLayout(LayoutKind.Sequential)]

C# コードでの構造体の宣言の前

于 2012-11-08T14:31:00.900 に答える