私は答えを得た:
署名は、このようにする必要があり:
[DllImport(aDll.dll, CallingConvention = CallingConvention.Cdecl,
CharSet = CharSet.Auto)]
static unsafe extern ulong aMethod(ref IntPtr firstParameter,
ref IntPtr secondParameter);
パラメータは、ここのように宣言する必要があります。
:
IntPtr firstParameter = new IntPtr();
IntPtr secondParameter = new IntPtr();
と呼び出しは次のように行われています
aMethod(ref firstParameter, ref secondParameter);
マーシャリングと、ここのように文字列に関連した非整列化:
明らか
Marshal.PtrToStringAnsi(firstParameter)
Marshal.PtrToStringAnsi(secondParameter)
、このマーシャリングはdll's APIの規則に基づいて選択されています。
- 私のすべての後にわからないが、すべての問題がCharset
とCallingConvention
オプションで、それらのソースを持っていた...
あなたは、本質的に、マネージコードからこのメソッドを呼び出すようにしませんか? –
可能な複製[関数へのポインタを引数に持つラップされたC++メソッドのC#で署名を書くにはどうすればよいですか?](http://stackoverflow.com/questions/7410382/how-can-i-write- c-method-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-to-a) –
'char *'は関数へのポインタではありません。私はまた、二重間接を見ません... – dtb