1

私の MFC ActiveX プログラムでは、dll ファイルによって提供される関数の呼び出しがあります。また、関数には構造体型のパラメーターがあります。私が出会った奇妙なことは、関数を呼び出した後、構造体のデータが完全ではないということです。私は 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 を呼び出す前に、構造体を日付で初期化します。「url」など:

sprintf(channelInfo.url, "192.168.121.122");

そして、呼び出しの後、dll 関数 GSNET_ClientStart で、URL を取得します。それは「168.121.122」、「192」であることがわかりました。不足している。

基本的な文法を間違えていないことを確認できます。

4

1 に答える 1

1

2 つのモジュールの構造体定義の間にレイアウトの不一致があります。DLL の url メンバーへのオフセットは、ActiveX のそのフィールドへのオフセットよりも 4 大きいオフセットを持っているようです。

構造体の定義が両方のモジュールで一致していることを確認してください。構造体レイアウトに関連するコンパイラ オプションが両方のモジュールで同じであることを確認してください。

この不一致が発生する原因は非常に多いため、決定的な修正を行うことはできませんが、根本的な問題は不一致であることは確かです。

于 2013-07-05T06:26:40.113 に答える