0

C# プログラムからサードパーティの C++ dll へのポインタの受け渡しに関して、多くの議論があることは知っています。しかし、私のケースは特別なものです。

サードパーティの C++ DLL があり、次のように関数を呼び出します。

[DllImport(@"ThirdParty.DLL", EntryPoint = "?ThirdPartyEntryPoint", CallingConvention = CallingConvention.Cdecl)]
public static extern Int16 ThirdParty_command(uint p1, ushort p2, uint[] data);

ここで注意が必要なのは、「uint[] data」の要素の 1 つが、C++ の文字列を指す文字列ポインター (型: unsigned char ) であることです。私はこれを試しましたが、うまくいきません:

String name = "myName";
fixed (char* nameAddress = name)
{
    uint[] data = { 0x00, 0x01, 0x02,(uint) nameAddress };
    Int16 result = ThirdParty_command(0, 0, data);
}
4

1 に答える 1

0

unsigned char*通常はbyte[]、ではなく、という事実が原因である可能性がありuint[]ます。C側で予想される文字列のタイプを確認してください。UTF-16(C#文字列)をUTF-8などの他のエンコーディングに変換する必要がある場合があります。

于 2012-05-31T01:13:10.710 に答える