1

私のマシンには Delphi7 と DelphiXE2 (どちらも 32 ビット) がインストールされています。そして、dll 'libnodave.dll' の関数 openSocket() を使用する必要があります。

問題は、Delphi7 および D7 でコンパイルされた .exe ファイルでは、この関数がすぐに実行されて整数値が返されることですが、DelphiXE2 では 3 秒間停止し (タイムアウトだと思います)、ゼロが返されます。D7 ウィッチに一種の「proxy-dll」を書き込もうとしましたが、元の dll から内部的に同じ関数を呼び出しますが、機能しません。ここで、ローカル関数のパラメーター以外に、プログラムの実行に関する他の情報が dll に渡されることに興味があります。誰が関数を呼び出すかによって、ライブラリの動作に違いが生じる可能性があります。また、D7 コンパイラとして機能するように DelphiXE コンパイラをセットアップする方法はありますか? もう 1 つ質問があります。デバッグ中に、プログラムで定義されたすべてのグローバル パラメータ ({$DEFINE WIN32} など) を調べるにはどうすればよいですか。

アイデアをありがとう。

4

2 に答える 2

1

問題は、Delphi7 および D7 でコンパイルされた .exe ファイルでは、この関数がすぐに実行されて整数値が返されることですが、DelphiXE2 では 3 秒間停止し (タイムアウトだと思います)、0 を返します。

openSocket()関数の宣言はどのように見えますか? 呼び出し規約は両方のバージョンで一致していますか? 関数にStringパラメーターはありますか? StringD7 では Ansi、DXE2 では Unicode であることを思い出してください。関数が同じ呼び出し規約で宣言され、すべてのパラメーターが両方のバージョンで正しいデータ型で宣言されていることを確認してください。

ローカル関数のパラメーター以外に、プログラムの実行に関する他の情報が dll に渡されることに興味があります。

パラメータ値以外の情報は関数に渡されません。

D7 コンパイラとして機能するように DelphiXE コンパイラをセットアップする方法はありますか?

いいえ、XE2 コンパイラを D7 コンパイラのように動作させることはできません。

デバッグ中に、プログラムで定義されたすべてのグローバル パラメータ ({$DEFINE WIN32} など) を調べるにはどうすればよいですか。

デバッグ時にアクティブなコンパイラの DEFINE を表示する方法はありません。ただし、編集時には、現在アクティブな DEFINE をソース コードに挿入するキーボード ショートカットCtrl+ O+があります。O

于 2012-04-10T16:41:28.340 に答える