0

同様の質問を調べてみましたが、うまくいきませんでした。私が作成したビジュアル C++ dll からこの dllImport タグを形成する方法について、私は混乱しています。

プロトタイプは次のとおりです。

extern "C" __declspec(dllexport) int WS_CreateComm(char *cAddress,void *Obj, void (*LogFunc)(void *, const char *, int, int, const char*, const char*, int, unsigned int))

C# クラスにどのようにインポートしますか?

アップデート:

これは私がこれまでに得たものです:

delegate int CFuncDelegate(IntPtr Obj, string cErrorText, int iErrorLevel, int iTPM, string cFile, string cFunc, int iUserId, UInt16 iLineNumber);

    [DllImport("WatchService2DLL.dll")]
    public static extern void WS_CreateComm(string cAddress,void* Obj,CFuncDelegate func);

public static void Function(IntPtr CFunC, IntPtr Obj, string cErrorText, int iErrorLevel, int iTPM, string cFile, string cFunc, int iUserId, UInt16 iLineNumber)
    {
        CFuncDelegate func = (CFuncDelegate)Marshal.GetDelegateForFunctionPointer(CFunC,typeof(CFuncDelegate));
        int rc = func(Obj,cErrorText,iErrorLevel,iTPM,cFile,cFunc,iUserId,iLineNumber);
    }

この実装は正しいですか?WS_CreateComm を正確に呼び出すにはどうすればよいですか?

4

1 に答える 1

2

関数ポインターをマーシャリングする必要があるため、この質問を見てください。char パラメータには、通常、stringbuilder または文字列が使用されます。void* は long としてマップでき、コールバックで返される可能性が高いため、null に設定します。

于 2012-12-18T14:49:18.953 に答える