2014-03-26 47 views
-1

我有這樣的C++代碼定義:轉換和調用C++ STDCALL到C#

static void STDCALL HandleVideoStatic(PVOID pContext, BYTE * apData[3], VideoSampleInfo_T * pVSI) 
{ 
    ((TMediaCallbackHandler *)pContext)->HandleVideo(apData, pVSI); 
} 

而且它傳遞給方法(沒有初始化)

WD_RegisterVideoPreviewCB(m_ahChannels[i], &m_aMediaHandler[i], HandleVideoStatic); 

如何上面HandleVideoStatic轉換爲C#代碼。以及如何在C#中調用它?

回答

0

假設你有你需要傳遞給函數的所有3個對象的指針,你可以像這樣把它聲明:

[DllImport("YOUR.dll", CallingConvention=CallingConvention.StdCall)] 
private static extern void HandleVideoStatic(IntPtr pContext, IntPtr apData, IntPtr pVSI); 

詳見Using the DllImport Attribute

+0

在C#中,m_aMediaHandler [i]是一個類實例。如果我將它傳遞給IntPtr apData。 VS顯示錯誤「invalid agruments」。我想因爲我傳遞了一個類實例,而不是一個指針。但是我必須將一個類實例傳遞給那個地方。 (你能提供更多的建議嗎? – user2916684

+0

所以你在C#中有一個類嗎?你不能將它傳遞給C++方法,你需要首先啓動相應的C++類(使用C++),獲取該對象的指針,然後將它傳遞給方法 – floele

+0

我如何製作一個指向類實例的指針並將它傳遞給該地點?我的那個實例的指針將解決問題 我是C#的新手,所以我可以做所有的想法。對此感到遺憾。非常感謝。 – user2916684