DLLImport使用C++;C#中的代码,带有结构和;原型
这是我在SO的第一篇帖子 在我将我的问题发布到SO之前。在C++中,我曾尝试使用DLimPult调用C++方法(它是在DLL文件中命名为SDK.dll)。但我遇到了一个问题:DLLImport使用C++;C#中的代码,带有结构和;原型,c#,c++,dllimport,C#,C++,Dllimport,这是我在SO的第一篇帖子 在我将我的问题发布到SO之前。在C++中,我曾尝试使用DLimPult调用C++方法(它是在DLL文件中命名为SDK.dll)。但我遇到了一个问题: 我曾尝试使用DLIMPORT在C++中使用这个C++代码。 我可以转换除VideoCaptureCB_Ptr之外的句柄和PVOID。我知道我没有C语言中的VideoCaptureCB#u Ptr的定义 我回顾一下SDK.h文件。我看到这个代码了 typedef void (CALLBACK * VideoCaptureCB
我曾尝试使用DLIMPORT在C++中使用这个C++代码。 我可以转换除VideoCaptureCB_Ptr之外的句柄和PVOID。我知道我没有C语言中的VideoCaptureCB#u 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。所以我可以将其传递给RegisterServiceDeoPreviewCB定义的参数
提前谢谢
---------------更新
哦,我意识到我只需要将下面的代码转换成C#
请帮助我将其转换为C#我们可以通过两种方式实现它,这取决于其他关注点(如时间、精力、维护空间等): <> >端口非托管代码进入托管代码:正如您所看到的,我们可以有类似的C++类型而不是C++。我们有委托发生函数指针,struct/enum/class present typedef struct..但是,这个方法肯定要花很多时间,而且似乎我们做了双重工作,不能像我们希望的那样重用非托管代码
我认为“函数指针=>delegate,struct=>C#struct with
StructLayout(LayoutKind.Sequential)
属性可能会起作用……你说得对!为了让代码在C#中运行,我已经将上面的代码重写为C#……但根据我的经验,我可以将其转换为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;
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;