簡體   English   中英

Win7(64位)上的LoadLibrary問題

[英]LoadLibrary Problem on Win7 (64-bit)

我使用vs2005開發了MFC Regular DLL“靜態鏈接”。 當它編譯為32位DLL時

我可以使用“ LoadLibrary”從我的計算機或任何其他計算機上加載它。

但是當將其編譯為64位DLL時,我只能從我的計算機上加載它。

我查看了我的代碼並發現了聲明的全局對象。

MyClass myObj;

當我評論該對象時..我可以加載DLL並從其他機器上使用它。

找到全局對象...我無法從diffrenet機器加載DLL。

有人可以幫幫我嗎?

當我嘗試使用“GetLastError”時,它返回的數字如“-529697949”

錯誤代碼是0xe06d7363,最后3個十六進制數字拼寫為“MSC”。 這是Microsoft編譯器中C ++異常的異常代碼。

您的代碼正在轟炸未捕獲的C ++異常,可能是DllMain()中拋出的異常。 如果您無法從此提示中對其進行反向工程,則需要調試器。

創建/分配/初始化dll的全局/靜態對象(這是DllMain的一部分)時,也可能引發未捕獲的C ++異常。 所以很有可能在代碼中的某個地方有一個有效的throw語句負責這種行為(而不是某些編譯器/體系結構/平台錯誤;也許它只是一個特定於x64的定義?)。

要找到那個討厭的小*#!!:

  • 使用調試信息編譯所有代碼(/ DEBUG)
  • 打開符號服務器(調試/選項/調試/符號/符號文件(.pdb)位置:[x] Microsoft符號服務器)
  • 在“Thrown”列中打開所有Break on Exceptions(Debug / Exceptions ... / Tick all [])
  • 開始調試,您最終會找到正確的位置。

由於缺少強制執行的“throws”語句,例如在Java中(在c ++中它是可選的並且相當無用;請參閱函數簽名中的Throw關鍵字 ),try / catch / throw系統幾乎不可用於創建健壯且可維護的代碼; 它幾乎就像隨處可見隱藏的冒險。

目標計算機是否已安裝64位Visual C ++ 2005 redistibutable? 他們可能從其他應用程序安裝了32位版本但是從未安裝過64位版本?

請參閱http://www.microsoft.com/downloads/en/details.aspx?FamilyID=90548130-4468-4bbc-9673-d6acabd5d13b

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM