這裏是抄錄錯誤一個示例應用程序的鏈接: http://sdrv.ms/17j2Ale的Crystal Reports瀏覽器的ActiveX導致內存溢出異常在VB6/.NET應用程序的Windows 7
我有三個項目。一個是.NET 2.0 Windows Forms應用程序(.NET App),一個是VB6標準EXE應用程序(VB App),另一個是VB6 ActiveX DLL(VB DLL)。 .NET應用程序引用已註冊的VB DLL。這個VB DLL基本上啓動了Crystal Reports。 VB應用程序通過Shell()命令啓動.NET應用程序。以下是發生了什麼:
如果我直接運行.NET應用程序,則可以毫無問題地打開Crystal Reports文檔。但是,當VB應用程序通過Shell()命令啓動.NET應用程序時,當.NET應用程序嘗試打開Crystal Reports文檔時,出現Out of Memory錯誤。
現在這裏是踢球者 - 這適用於Windows XP,但是當我們嘗試在Windows 7 64-bit中啓動它時,我們遇到了這個問題。我確信這裏有一個簡單的解決方案。任何接受者?
您可以跳轉到更新5,在此處我縮小了問題範圍。
更新:我也嘗試創建第二個.NET 2.0的Windows窗體應用程序(.NET啓動器),並通過從它推出的.NET應用程序:
Process.Start(@"C:\Path\OtherApp.exe");
,當我試圖打開在.NET應用程序中的Crystal Reports文檔仍然給我提供了同樣的Out of Memory錯誤。
更新 2:由於刪除更新4
更新 3:所以今天我發現.NET應用程序的原因是能夠打開,當它被直接啓動了該報告,因爲我正在啓動它在Visual Studio中。當我在Visual Studio之外嘗試執行該可執行文件時,錯誤返回。我注意到截至2005年,Visual Studio開始使用vshost.exe來啓動Windows應用程序以加快調試啓動:http://blogs.msdn.com/b/dtemp/archive/2004/08/17/215764.aspx 當我禁用vshost功能時,返回內存不足錯誤。所以我想問題是,這個vshost過程是什麼讓它可以在Windows 7上工作?
更新 4:我能夠編譯VB6 DLL與調試信息並加載源和調試信息到Visual Studio,並通過它的步驟當.NET應用程序執行VB6代碼。內存不足異常來自此行:
Dim myForm As frmTheForm
Set myForm = New frmTheForm 'OOM Error right here
因此,在vshost.exe中,此表單可以初始化,但不能沒有它。
更新 5:我已將問題縮小到Crystal Reports ActiveX查看器。我從頭開始創建一個新的VB ActiveX DLL項目,並且只用一個表單開始。這每一種方式都有效。然後我添加了Crystal ActiveX Report Viewer Library 11.5 - 並返回錯誤!這絕對是報告查看器。我被告知這個問題可以通過簡單的註冊表調整來解決。
更新 6:我使用了Procmon。Sysinternals公司的exe文件,並生成可以在這裏找到一個日誌文件:
你確保所有的組件都建在'Release'模式?這個問題是相反的,但可能是相關的(http://stackoverflow.com/questions/1723797/vb6-app-calling-net-dll-outofmemory-exception)。你也可以確認Win7機器上所有需要的依賴關係嗎? – keyboardP
@Zach:我不知道這是否可能。是否可以運行此應用程序與64位環境兼容?我的猜測是vshost可能會爲你做一些命令行參數。 – shahkalpesh
我試着在發佈模式下運行。另外我相信我的目標是x86平臺。我真的很想知道vshost對運行環境的作用。 – Zach