C ++からのネイティブ関数のPInvokingに問題があります...他のすべてのネイティブ関数を問題なくPInvokedしました(パラメーターは非常に単純な変換でした)。以下は、c++プロトタイプとc++でのその使用法です。
DECL_FOOAPIDLL DWORD WINAPI FOO_Command(
VOID *Par, //pointer to the parameter(s) needed by the command
DWORD Len, //length of Parameter in bytes
DWORD Id //identification number of the command
);
利用方法:
static DWORD DoSomething(WCHAR *str)
{
DWORD len = (wcslen(str)+1)*sizeof(WCHAR);
DWORD ret = FOO_Command((VOID *)str,len,FOOAPI_COMMAND_CLOSE);
return(ret);
}
私のC#PInvoke:
[DllImport("FOO.dll")]
static public extern uint FOO_Command(IntPtr par, uint len, uint id);
private void DoSomething()
{
string text = "this is a test";
IntPtr ptr = Marshal.StringToHGlobalUni(text);
uint hr = FOO_Command(ptr,255, FOOAPI_COMMAND_CLOSE);
Marshal.FreeHGlobal(ptr);
}
1)これはこのAPIをPInvokeする正しい方法ですか?2)パラメーターとして255があるptrのサイズを取得するにはどうすればよいですか?
上記は機能しますが、私はPInvokeと「ネイティブ」の世界に不慣れです...
ありがとうございました