1

作成した DLL にリンクするときに問題が発生します。スローされる例外はUnhandled exception at 0x000007FA17461069 (ntdll.dll). 奇妙なことに、これは DLL を win32 アプリケーションでリンクした場合にのみ発生し、win32 コンソール アプリケーションではリンクしないということです。問題は、スレッドの作成を扱うもののようです。

コール スタックは次のとおりです。

msvcr110d.dll!_callthreadstartex() Line 354            C
msvcr110d.dll!_threadstartex(void * ptd) Line 337      C

DLL には、オペレーティング システムの I/O 完了ポートを使用する ACE proactor フレームワークの実装が含まれています。コンソール アプリケーションでは正常に動作しますが、win32 ウィンドウ アプリケーションでは動作しません。

どんな助けでも大歓迎です。

編集:以下のコメントで要求されたとおり:

例外をスローするコード行は次のとおりです。ACE_Service_Config::open(GetCommandLineA());

私は ACE 構成フレームワークを使用して、DLL を svc.conf ファイルで動的にロードします。mainこれは、コンソール プログラムの機能に対して記述する必要がある唯一のコード行です。

WM_CREATEメッセージがキャッチされた後、この行を書いてみました。クラッシュします。

4

1 に答える 1

2

コンソール アプリケーションを作成すると、ACE は main を再定義して正しく初期化されるようにします。win32 Windows アプリケーションを作成する場合、このトリックは機能しません。ACE::init() と ACE::fini() を自分で呼び出す必要があります。これを行う方法の例については、ACE_wrappers/tests/ACE_Init_Test.cpp を参照してください。

于 2013-03-29T08:04:02.293 に答える