结构数据在从OCX传递到dll后作为函数参数丢失

时间:2013-07-05 05:42:39

标签: dll mfc struct activex ocx

在我的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”。不见了。

我可以确保我在基本语法上没有犯错误。

1 个答案:

答案 0 :(得分:1)

两个模块中的结构定义之间存在布局不匹配。似乎DLL中url成员的偏移量比ActiveX中该字段的偏移量多4倍。

确保两个模块中的结构定义匹配。确保两个模块中与struct layout相关的编译器选项相同。

我无法给出明确的解决方法,因为有很多方法可能会发生这种不匹配,但肯定根本问题是不匹配。