0

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と「ネイティブ」の世界に不慣れです...

ありがとうございました

4

1 に答える 1

1
private void DoSomething() 
{ 

    string text = "this is a test"; 
    IntPtr ptr = Marshal.StringToHGlobalUni(text); 

    uint hr = FOO_Command(ptr, (text.Length + 1) * 2, FOOAPI_COMMAND_CLOSE); 

    Marshal.FreeHGlobal(ptr); 

} 
于 2012-06-30T01:29:22.967 に答える