关于动态库接口的参数传递问题

这两天要在主控程序中C添加一个接口以便调用动态库A中的对应函数

 

A中接口原型

原型为(示例隐去实际名称)

BOOL OpenViewA(CString strPro1,CString strPro2,CString strPro3)

{

。。。

return TURE;

}

由于C中原先有类似的接口OpenViewCC就将其拷贝一份,改改名字。
其原始原型为: 注意参数类型

BOOL OpenViewCC(LPCSTR strPro1,LPCSTR strPro2,LPCSTR strPro3)

{

。。。

return TURE;

}

在C中添加的调用接口原型为

 

extern "C" __declspec( dllexport ) BOOL OpenViewA(CString strPro1, CString strPro2, CString strPro3 )

{

// 定义要调用的A中的同类型的函数指针

typedef BOOL (*func)(LPCSTR,LPCSTR,LPCSTR );

 

// 从OBC动态库中获得对应的函数接口

func proc = (func)GetProcAddress( m_haDll, "OpenViewA" );

// 如果函数存在,直接调用

if( NULL != proc )

{

 

return proc(strPro1, strPro2, strPro3);

 

}

 

// 如果函数不存在,返回FALSE

return FALSE;

}

 

 

结果每次调用都产生异常。后来发现是参数问题。在主控C和动态库A中的接口的参数类型应严格一致。要么都是CString 要么都是 LCPSTR.否则产生异常也不为怪。

 

注意接口的形参类型。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值