c#调用c++ sdk 调用函数参数为结构体指针

ddup_fswx6 2018-08-18 10:31:32
本人菜鸟一枚
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) (结构体)

这两种都试了,接口返回还是参数不符合,请大神上码指教









...全文
200 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
xian_wwq 2018-08-20
  • 打赏
  • 举报
回复
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,也不能只传个空指针进去
需要给指针分配合理的空间
看个示例:

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();


110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧