Pro*C 経由で Oracle DB にアクセスするために作成した DLL 関数から奇妙な動作が発生しています。具体的には、MQL4 から呼び出すと問題なく動作しますが、C クライアントから呼び出すと特定の行でクラッシュします。
クラッシュの理由は、「GAClient.exe の 0x61428C74 (oranls11.dll) で未処理の例外: 0xC0000005: アクセス違反の書き込み場所 0x00E368EC」と表示されます。
開発環境は 32 ビット DLL をビルドするように設定されていますが、Windows 8 64 ビットで Visual Studio 2010 を使用しています。数日間のデバッグの後、次の結論に達しました。 - EXEC SQL FETCH が呼び出されるとクラッシュが発生します。カーソルは正常に開きます。- 一連の fprintf() コマンドから収集できるように、DLL 関数に渡されたすべてのパラメーターは、まったく同じ値でクラッシュ ポイントに到達します。これは、フェッチに使用される変数にも (特に) 当てはまります。- Oracle セッション トレース ファイルは事実上同一であり、明らかに Fetch も成功したことを示しています - 両方のクライアント (MT4.exe と GAClient.exe) は、コマンド プロンプトから同じ環境変数セット (PATH、ORACLE_HOME など) を使用して実行されます。
この段階では、どのコード フラグメントを投稿するのが役立つかさえわかりません。誰かがこれを修正し始める場所を知っていれば、喜んで共有します。