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

这两天要在主控程序中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.否则产生异常也不为怪。

 

注意接口的形参类型。

 

 

你可能感兴趣的:(c++开发)