最近、一部の C++ コードを VS2005 -> VS2010 からアップグレードしました。
この C++ コードは RFA_RMDS と呼ばれ、Reuters RFA ライブラリの社内ラッパーです。このラッパーは、一部の C# コードで使用されます。したがって、明確にするために:
C# -> C++ ラッパー (RFA_RMDS) -> Reuters RFA ライブラリ。
アップグレード後、アプリケーションは RFA クライアントをインスタンス化するときに AccessViolationException (以下) をスローしますが、これは Windows 7 でのみです。つまり、Windows XP で正常に動作します。
さらに、C++ ラッパーの VS2005 バージョンを使用するアプリケーションの以前のビルドは、Windows 7 と Windows XP の両方で正常に動作します。
これにより、アップグレードがこの例外の原因であると私は信じています。しかし、私は C++ 開発者ではないので (そして、現在は開発者がいません)、これにどう対処すればよいか途方に暮れています。
さらにいくつかのポイント:
- 実行可能ファイルがCorFlagsによって変更されているため、アプリケーションは Windows 7 で 32 ビット モードで実行されます。
- VS2005 C++ ラッパーを使用するアプリケーションの以前のビルドは、Windows 7 と Win XP の両方で正常に動作します。
- C++ ラッパーは .NET 2.0 を対象としていますが、以前は .NET 3.5 (C# コードが対象) を対象としていました。この問題は、.NET 3.5 をターゲットにした場合でも存在しました。
- Windows 7 ボックスには、Microsoft Visual C++ 2005 (x86??/x64)、2008 (x86/x64)、および 2010 (x86) の再頒布可能ファイルが含まれています。
他に提供すべき情報があれば教えてください。おそらくその入手方法も教えてください。
ヒント/提案/解決策は、最も基本的なものであっても非常に高く評価されます. ありがとうございました。
スタックトレース
AccessViolationException
保護されたメモリを読み書きしようとしました。これは多くの場合、他のメモリが破損していることを示しています。
std.basic_string,std::allocator >.{dtor}(basic_string\,std::allocator >* ) で
c:\buildagent\work\ef735b7d6bb58dc3\rfa_rmds\rfa_rmds\apploggerclient.cpp:line 70 の AppLoggerClient.processEvent(AppLoggerClient* , Event* event) で
c:\buildagent\work\ef735b7d6bb58dc3\rfa_rmds\rfa_rmds\messageloop.cpp:line 51 の CWM.WindowProc(HWND__* hwnd, UInt32 uMsg, UInt32 wParam, Int32 lParam)
DispatchMessageW(tagMSG*) で
c:\program files\microsoft sdks\windows\v6.0a\include\winuser.h:line 3052 の DispatchMessage(tagMSG* lpMsg) で
c:\buildagent\work\ef735b7d6bb58dc3\rfa_rmds\rfa_rmds\messageloop.cpp:line 89 の CWM.run(CWM* )
c:\buildagent\work\ef735b7d6bb58dc3\rfa_rmds\rfa_rmds\rfa_frame.cpp:line 122 の RFA_RMDS.RFA_Frame.Start()
c:\buildagent\work\ef735b7d6bb58dc3\rfa_rmds\rfa_rmds\rfa_framemanager.cpp:line 126 の RFA_RMDS.RFA_FrameManager.WorkerThreadFunction()
System.Threading.ThreadHelper.ThreadStart_Context (オブジェクトの状態) で
System.Threading.ExecutionContext.runTryCode (オブジェクト userData) で
System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup (TryCode コード、CleanupCode backoutCode、オブジェクト userData) で
System.Threading.ExecutionContext.RunInternal (ExecutionContext executionContext、ContextCallback コールバック、オブジェクトの状態) で
System.Threading.ExecutionContext.Run (ExecutionContext executionContext、ContextCallback コールバック、オブジェクトの状態) で
System.Threading.ThreadHelper.ThreadStart() で
VS2010 C++ コマンド ライン
/I"..\..\RFA-6.3\Include" /I"..\..\RFA-6.3\Include\TIBMsg" /I"..\..\RFA-6.3\Include\SessionLayer" / I"..\..\RFA-6.3\Include\Common" /I"..\..\RFA-6.3\Include\Logger" /I"..\..\RFA-6.3\Include\Config" /Zi /clr:oldSyntax /nologo /W3 /WX- /O2 /Oy- /GL /D "WIN32" /D "NDEBUG" /D "_WINDLL" /D "_UNICODE" /D "UNICODE" /EHa /MD / GS /fp:正確 /Zc:wchar_t /Zc:forScope /Yu"StdAfx.h" /Fp"Release\RFA_RMDS.pch" /Fa"Release\" /Fo"Release\" /Fd"Release\vc90.pdb" /Gd /TP /FU"c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll" /FU"c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll" /FU"c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll"/analyze- /errorReport:queue
VS2005 C++ コマンド ライン
/Od /I "..\..\RFA-6.3\Include" /I "..\..\RFA-6.3\Include\TIBMsg" /I "..\..\RFA-6.3\Include\SessionLayer " /I "..\..\RFA-6.3\Include\Common" /I "..\..\RFA-6.3\Include\Logger" /I "..\..\RFA-6.3\Include\ Config" /D "WIN32" /D "_DEBUG" /D "_WINDLL" /D "_UNICODE" /D "UNICODE" /FD /EHa /MDd /Yu"stdafx.h" /Fp"Debug\RFA_RMDS.pch" / Fo"Debug\\" /Fd"Debug\vc80.pdb" /W3 /nologo /c /Zi /clr:oldSyntax /TP /errorReport:prompt /FU "c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 \System.dll" /FU "c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll" /FU "c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.XML .dll"
VS2010 リンカー コマンド ライン
/OUT:"F:\checkout\gl\global\trunk\client\modules\RFASource\DotNet2.0\RFA_RMDS\Release\RFA_RMDS.dll" /INCREMENTAL:NO /NOLOGO /LIBPATH:"..\..\RFA -6.3\Libs" /DLL "msvcprt.lib" "msvcrt.lib" "ws2_32.lib" "RFA6_Common80.lib" "RFA6_Config80.lib" "RFA6_Logger80.lib" "RFA6_Data80.lib" "RFA6_Connections80.lib" "RFA6_Connections_MD80. lib" "RFA6_SessionLayer80.lib" "AnsiPage80.lib" "libTibMsg.lib" "dacslock.lib" "Shell32.lib" "Shlwapi.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /MANIFEST /ManifestFile:"Release\RFA_RMDS.dll.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"F:\checkout \gl\global\trunk\client\modules\RFASource\DotNet2.0\RFA_RMDS\Release\RFA_RMDS.pdb" /PGD:"F:\checkout\gl\global\trunk\client\modules\RFASource\DotNet2.0\ RFA_RMDS\Release\RFA_RMDS.pgd" /LTCG /TLBID:1 /DYNAMICBASE:NO /FIXED:NO /MACHINE:X86 /ERRORREPORT:QUEUE\checkout\gl\global\trunk\client\modules\RFASource\DotNet2.0\RFA_RMDS\Release\RFA_RMDS.pgd" /LTCG /TLBID:1 /DYNAMICBASE:NO /FIXED:NO /MACHINE:X86 /ERRORREPORT:QUEUE\checkout\gl\global\trunk\client\modules\RFASource\DotNet2.0\RFA_RMDS\Release\RFA_RMDS.pgd" /LTCG /TLBID:1 /DYNAMICBASE:NO /FIXED:NO /MACHINE:X86 /ERRORREPORT:QUEUE
VS2005 リンカー コマンド ライン
/OUT:"F:\checkout\gl\global\trunk\client\modules\RFASource_VS2005\DotNet2.0\RFA_RMDS\Debug\RFA_RMDS.dll" /INCREMENTAL /NOLOGO /LIBPATH:"..\..\RFA-6.3 \Libs" /DLL /MANIFEST /MANIFESTFILE:"Debug\RFA_RMDS.dll.intermediate.manifest" /DEBUG /ASSEMBLYDEBUG /PDB:"f:\checkout\gl\global\trunk\client\modules\RFASource_VS2005\DotNet2.0\ RFA_RMDS\Debug\RFA_RMDS.pdb" /MACHINE:X86 /FIXED:No /ERRORREPORT:PROMPT msvcprt.lib msvcrt.lib ws2_32.lib RFA6_Common80.lib RFA6_Config80.lib RFA6_Logger80.lib RFA6_Data80.lib RFA6_Connections80.lib RFA6_Connections_MD80.lib RFA6_SlibessionLayer8 AnsiPage80.lib libTibMsg.lib dacslock.lib Shell32.lib Shlwapi.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.ライブラリ