簡體   English   中英

DLLImport在C#中使用C ++代碼與struct&prototype

[英]DLLImport using C++ code in C# with struct & prototype

這是我的第一篇帖子

在以SO發表我的問題之前。 我曾經嘗試使用DLLImport在C#中調用C ++方法(它在名為SDK.dll的DLL文件中)。 但是我遇到了一個問題:

我試圖使用DLLImport在C#中使用此C ++代碼。

RegisterVideoPreviewCB(HANDLE hChannel, PVOID pContext, VideoCaptureCB_Ptr pCB);

除了VideoCaptureCB_Ptr,我可以轉換HANDLE和PVOID。 我知道我在C#中沒有VideoCaptureCB_Ptr的定義。

我回頭看看SDK.h文件。 我看到這個代碼

typedef void (CALLBACK * VideoCaptureCB_Ptr)(PVOID pContext, BYTE * apData[3],  VideoSampleInfo_T * pVSI);
typedef struct _VideoSampleInfo_T
{
    ULONG   idFormat; // 
    ULONG   lSignalState;
    int     nLen; // not used for raw video data(e.g. YUV420)
    int     nWidth;
    int     nHeight;
    int     anPitchs[3]; // only used for raw video data(e.g. YUV420)
    ULONG   dwMicrosecsPerFrame; // 1000*1000/FPS
    ULONG   field;
    int     iSerial;

} VideoSampleInfo_T;

我想我必須先使用DllImport聲明_VideoSampleInfo_T和VideoCaptureCB_Ptr,然后再在C#中聲明RegisterVideoPreviewCB。

因此,任何人都可以幫助我使用DllImport或以某種方式(例如重新聲明VideoCaptureCB_Ptr)在C#中創建VideoCaptureCB_Ptr定義。 因此,我可以將其傳遞給RegisterVideoPreviewCB定義的參數。

提前致謝。

---------------更新哦,我意識到我只需要將以下代碼轉換為C#

 typedef void (CALLBACK * VideoCaptureCB_Ptr)(PVOID pContext, BYTE * apData[3], VideoSampleInfo_T * pVSI);
    typedef struct _VideoSampleInfo_T
    {
        ULONG   idFormat; // 
        ULONG   lSignalState;
        int     nLen; // not used for raw video data(e.g. YUV420)
        int     nWidth;
        int     nHeight;
        int     anPitchs[3]; // only used for raw video data(e.g. YUV420)
        ULONG   dwMicrosecsPerFrame; // 1000*1000/FPS
        ULONG   field;
        int     iSerial;

    } VideoSampleInfo_T;

請幫助我將其轉換為C#

我們可以通過兩種方式來實現它,這取決於其他方面的考慮(例如時間,精力,維護)。

  1. 將非托管代碼移植到托管代碼中:如您所見,我們可以使用類似的C#類型來代替C ++。 我們有委派函數的指針,struct / enum / class當前的typedef struct。但是,這種方法肯定要花費很多時間,似乎我們做了雙重工作,不能隨意使用非托管代碼。

  2. 使用工具將非托管代碼轉換為托管代碼:例如,我們帶有Windows SDK附帶名稱為tlpimp.exe( http://clrinterop.codeplex.com/releases/view/17579 )的工具。 您可以參考它並嘗試更新一些規則以適應您的情況。 通常,我們可能需要為非托管代碼類型的復雜類型創建一些中間的c#類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM