这个dllImport标签将如何形成?

时间:2012-12-18 14:43:07

标签: c# visual-c++ dllimport

我试过看类似的问题,但没找到运气。我只是对如何从我创建的可视化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?

1 个答案:

答案 0 :(得分:2)

看一下这个question,因为你需要编组一个函数指针。对于char参数,通常使用字符串构建器或字符串。 void *可以映射为long,我将其设置为null,因为它很可能在回调中传递给您。