在我的MFC ActiveX程序中,有一个dll文件提供的函数调用。并且函数中有一个struct类型参数。我遇到的奇怪的事情是在调用函数之后,struct中的数据不完整。我是ActiveX和DLL的新手,真的无法理解这是怎么发生的......主要代码如下:
结构的定义:
typedef struct{
WORD m_protocol;
WORD m_playstart;
...
char url[128];
char username[MAX_USER_NAME_LEN+1];
char password[MAX_PASSWORD_LEN+1];
}CHANNEL_CLIENTINFO;
ActiveX代码:
CHANNEL_CLIENTINFO channelInfo;
...
...
GSNET_ClientStart(&channelInfo);
dll代码:
GSNET_ClientStart(CHANNEL_CLIENTINFO *m_pChaninfo)
{
...
...
}
任何人都可以帮助我吗?谢谢大家。
了解更多详情:
在ActiveX程序中,在调用GSNET_ClientStart之前,我用一些日期初始化struct。比如'url':
sprintf(channelInfo.url, "192.168.121.122");
在调用之后,在dll函数GSNET_ClientStart中,我得到了url,结果是“168.121.122”,“192”。不见了。
我可以确保我在基本语法上没有犯错误。
答案 0 :(得分:1)
两个模块中的结构定义之间存在布局不匹配。似乎DLL中url成员的偏移量比ActiveX中该字段的偏移量多4倍。
确保两个模块中的结构定义匹配。确保两个模块中与struct layout相关的编译器选项相同。
我无法给出明确的解决方法,因为有很多方法可能会发生这种不匹配,但肯定根本问题是不匹配。