2013-07-05 73 views
1

在我的MFC ActiveX程序中,有一個由dll文件提供的函數調用。在函數中有一個結構類型參數。我遇到的奇怪的事情是在調用函數之後,struct中的數據不完整。我的ActiveX和DLL的更新,而實在無法理解怎麼會發生了......主要的代碼如下所示:作爲函數的參數從OCX傳遞到dll後struct丟失的數據

結構概念的探討:

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,我出不來了網址,原來是「168.121.122」,在「192」不見了。

我可以確保我在基本語法中沒有犯任何錯誤。

+0

您需要顯示代碼。並且還輸出。 –

+0

嗨,David Heffernan。我已經添加了一些說明。不管它有幫助嗎? –

回答

1

在兩個模塊中的結構定義之間存在佈局不匹配。看起來,DLL中的url成員偏移量的偏移量比ActiveX中該字段的偏移量多4。

確保兩個模塊中的結構定義匹配。確保與兩個模塊中的結構佈局相關的編譯器選項相同。

我不能給出明確的解決方法,因爲有很多方法可能會發生這種不匹配,但肯定根本問題是不匹配。

+0

你太棒了!我找到了原因。我很粗心,沒有發現兩個結構定義不一樣。 dll中的一個定義了一個額外的變量......非常感謝。再次面對這個問題時我不會感到困惑〜 –