这两天要在主控程序中C添加一个接口以便调用动态库A中的对应函数
A中接口原型
原型为(示例隐去实际名称)
BOOL OpenViewA(CString strPro1,CString strPro2,CString strPro3)
{
。。。
return TURE;
}
BOOL OpenViewCC(LPCSTR strPro1,LPCSTR strPro2,LPCSTR strPro3)
{
。。。
return TURE;
}
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.否则产生异常也不为怪。
注意接口的形参类型。