1

在我的 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 之前,我用一些日期初始化结构。如“网址”:

sprintf(channelInfo.url, "192.168.121.122");

调用后,在 dll 函数 GSNET_ClientStart 中,我得到了 url,原来是“168.121.122”,即“192”。不见了。

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

4

1 回答 1

1

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

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

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

于 2013-07-05T06:26:40.113 回答