2012-12-18 65 views
0

我試過尋找類似的問題,但沒有找到運氣。我只是困惑於如何從我創建的Visual C++ DLL形成這個dllImport標籤。這個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?

+0

'unsigned int'是一個'UInt32',而不是'UInt16'。 –

+0

啊,沒有明白。謝謝 – tareqx3

回答

2

看看這question因爲你需要編組函數指針。對於char參數,通常使用stringbuilder或字符串。 void *可以被映射爲long,我將它設置爲null,因爲它很可能會在回調中傳回給您。

+0

更新的問題 – tareqx3