SDK函数 LIBBVCU_API BVCU_Result BVCU_Initialize( const BVCU_GlobalParam* pParam);
其中 BVCU_GlobalParam为结构体
typedef struct _BVCU_GlobalParam
{
int iSize;
void (*OnEvent)(int iEventCode, void* pParam);
int iReserved[4];
}BVCU_GlobalParam;
问题我是该直接传递一个指针,还是传一个BVCU_GlobalParam类型参数
public IntPtr m_bvcuSdkHandle;
BVCU_Initialize(ref Im_bvcuSdkHandle)(指针)
还是 BVCU_Initialize(ref _BVCU_GlobalParam bg) (结构体)
这两种都试了,接口返回还是参数不符合,请大神上码指教
1 个解决方案
#1
typedef struct _BVCU_GlobalParam
{
int iSize; ----〉int
void (*OnEvent)(int iEventCode, void* pParam); ----〉使用委托来对应函数指针
int iReserved[4]; ----〉int[]
}BVCU_GlobalParam;
DLLImport时,结构体对应需声明字符集,内存对齐方式等
例如:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
如果要直接使用IntPtr,也不能只传个空指针进去
需要给指针分配合理的空间
看个示例:
{
int iSize; ----〉int
void (*OnEvent)(int iEventCode, void* pParam); ----〉使用委托来对应函数指针
int iReserved[4]; ----〉int[]
}BVCU_GlobalParam;
DLLImport时,结构体对应需声明字符集,内存对齐方式等
例如:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
如果要直接使用IntPtr,也不能只传个空指针进去
需要给指针分配合理的空间
看个示例:
struct devinfo
{
public string devID;
public string devName;
//……
}
//调用
devinfo di = new devinfo();
di.devID = "KD0000299";
di.devName="myDevice";
GCHandle C_di = GCHandle.Alloc(di, GCHandleType.Pinned);
FireSDK_GetDeviceList(loginid,out C_di.AddrOfPinnedObject(),...);
C_di.Free();
#1
typedef struct _BVCU_GlobalParam
{
int iSize; ----〉int
void (*OnEvent)(int iEventCode, void* pParam); ----〉使用委托来对应函数指针
int iReserved[4]; ----〉int[]
}BVCU_GlobalParam;
DLLImport时,结构体对应需声明字符集,内存对齐方式等
例如:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
如果要直接使用IntPtr,也不能只传个空指针进去
需要给指针分配合理的空间
看个示例:
{
int iSize; ----〉int
void (*OnEvent)(int iEventCode, void* pParam); ----〉使用委托来对应函数指针
int iReserved[4]; ----〉int[]
}BVCU_GlobalParam;
DLLImport时,结构体对应需声明字符集,内存对齐方式等
例如:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
如果要直接使用IntPtr,也不能只传个空指针进去
需要给指针分配合理的空间
看个示例:
struct devinfo
{
public string devID;
public string devName;
//……
}
//调用
devinfo di = new devinfo();
di.devID = "KD0000299";
di.devName="myDevice";
GCHandle C_di = GCHandle.Alloc(di, GCHandleType.Pinned);
FireSDK_GetDeviceList(loginid,out C_di.AddrOfPinnedObject(),...);
C_di.Free();