32位环境中,都正确。
在64位中,主程序传给dll的参数
主程序:
void CPlugin::Initialize(CCamera &camera, CManager &manager) const
{
……
FARPROC pFunc = GetProcAddress(m_handle, "PluginInitialize");
if (pFunc ) {
(* (PLUGIN_Initialize *)pFunc)(m_hPlugin, camera, manager);
//此处参数都正确
}
}插件中:
xtern "C" void __stdcall PluginInitialize(HANDLE handle, CCamera hCamera, CManager hManager)//参数已经不对了
{
AFX_MANAGE_STATE((AFX_MODULE_STATE *)AfxGetStaticModuleState);
CPluginModule *pPlugin = (CPluginModule *)handle;
if (pPlugin == NULL )
return ; pPlugin->Initialize(hCamera, hManager);
}其中:
struct CCamera {
HANDLE hDevice;
char *pName;
};结果,在主程序中的hDevice都正确,一旦传给dll就不对了。
我怀疑是64位数据错位,可是怎么解决呢~!???我已经配置了64位的环境,测试时,是在真正的64位系统上测试的。
在64位中,主程序传给dll的参数
主程序:
void CPlugin::Initialize(CCamera &camera, CManager &manager) const
{
……
FARPROC pFunc = GetProcAddress(m_handle, "PluginInitialize");
if (pFunc ) {
(* (PLUGIN_Initialize *)pFunc)(m_hPlugin, camera, manager);
//此处参数都正确
}
}插件中:
xtern "C" void __stdcall PluginInitialize(HANDLE handle, CCamera hCamera, CManager hManager)//参数已经不对了
{
AFX_MANAGE_STATE((AFX_MODULE_STATE *)AfxGetStaticModuleState);
CPluginModule *pPlugin = (CPluginModule *)handle;
if (pPlugin == NULL )
return ; pPlugin->Initialize(hCamera, hManager);
}其中:
struct CCamera {
HANDLE hDevice;
char *pName;
};结果,在主程序中的hDevice都正确,一旦传给dll就不对了。
我怀疑是64位数据错位,可是怎么解决呢~!???我已经配置了64位的环境,测试时,是在真正的64位系统上测试的。
当结构体中的成员有指针类型成员时,
如果传递的结构体参数,是指向结构体的指针就能是正确的,
也就是说改成 Initialize(CCamera *pcamera, CManager &manager)就可以了。具体什么原因,我也说不清,希望专家指教啊~!