2013-03-19 91 views
1

我有一個COM對象,最初是在Delphi 2007下編譯的,32位。現在我已經使用64位編譯器移植到Delphi XE3。它用一個新的64位DLL編譯成功,但我無法獲得它的註冊。爲什麼64位COM DLL無法使用Delphi XE3註冊

我正在使用管理員註冊DLL,它適用於32位DLL,但不適用於64位。

口口聲聲說

任何這裏提示「到內存位置無效的訪問」?

PS:我使用的命令只是%systemroot%\System32\regsvr32.exe test.dll

在Windows 7 64位註冊時,它顯示'無效訪問內存位置';當在Windows 8 64位註冊時,它顯示'動態鏈接庫初始化例程失敗'。

+2

如果這是您第一次運行該代碼,那麼你嘗試應該預期指針截斷錯誤加入madExcept或類似的並獲得一些調試信息如果你可以將代碼編譯成易於調試的代碼然後這也可能有幫助 – 2013-03-19 16:27:44

+0

是否有你需要使用的regsvr64.exe? – 2013-03-19 20:40:07

+0

@ NickHodges - regsvr32可以做到這一點,不知道爲什麼它沒有64位系統的名字,我將它用於64位和32位版本的deskband DLL,這個命令同樣適用於32位或64位 – 2013-03-19 21:46:03

回答

0

是的,我找到了原因。 在其中一個單元的初始化部分,它仍然使用第三方32位浮動操​​作。 我刪除代碼後,它成功註冊該DLL。

Win7上的errormessage的是混亂的,但對win8的,它說:「‘A動態鏈接庫初始化例程失敗’,它給出一個更清晰的原因。