2009-07-28 95 views
1

(我重新發布此消息,因爲我現在簽約成爲用戶)問題在承載ActiveX在Vista上(在Visual Studio 6中C++應用程序)II

我剛安裝了Visual Studio 6(SP5)在Vista企業機器上。有一些問題,但我認爲它設置好了。

問題是我的VC++ 6應用程序嘗試託管ActiveX時失敗。我能夠編譯它確定,但從Vista獲得關於rc.exe的警告消息(「此程序已知兼容性問題」)。

當我調試它時,我看到從CAxDialogImpl派生的類在其Create()方法上失敗。相同的應用程序在XP上工作得很好!

那裏是否存在已知的兼容性問題?我看到CAxDialogImpl :: Create()(我在這裏傳遞NULL)調用AtlAxCreateDialogA,而AtlAxCreateDialogA又調用CreateDialogIndirectParamA引發一般異常。

非常感謝,埃裏克

PS - 1.我聯繫我的機器上。 OS是32位。 2.我知道VS6在Vista上不支持,但我沒有選擇,因爲我遇到了麻煩,試圖將其遷移到VS 2008.

+0

更新: 當我的DLL(我的Visual C++應用程序實際上是一個DLL)由COM應用程序調用它可以工作,但是當它被一個.Net應用程序調用時,它就會失敗。 – 2009-07-30 07:17:39

回答

2

好的。 找到原因和解決辦法。

它似乎是一個DEP兼容性問題。 很難找到,因爲應用程序失敗時沒有顯示異常/消息。

該問題是由於我的dll中使用的舊ATL組件造成的。 ATL的舊版本在運行時生成機器代碼,然後嘗試從未標記爲可執行文件的內存頁面執行此代碼,因此如果啓用了硬件強制DEP,則會導致DEP違例。

我的XP機器和vista機器之間的區別實際上是在DEP操作中 - vista上的DEP是基於硬件的,這導致了問題。

此外,我有COM應用程序使用相同的DLL和工作正常,但。NET應用程序失敗,因爲它們是用DEP兼容性標誌創建的。

解決方案是從.Net應用程序中刪除DEP兼容性標誌。

乾杯, 埃裏克

PS - 兩個環節是非常有益的: http://support.microsoft.com/kb/948468 How to make my program DEP-compatible?

相關問題