4

私は持っている

ADDRESS での実行時エラー 216

Delphi XE2 でビルドされた 64 ビット dll を登録する場合 (私は Update 3 を持っています)。

コマンドプロンプトから(注:system32フォルダーには64ビットexeが含まれています!)

c:\windows\system32\regsvr32.exe My64bitdll.dll

「dllが正常にインストールされたというメッセージ」の後に、ランタイムエラーが発生しました。

Run/Parameters/host を使用して、登録プロセスをデバッグしたいと思います。

誰でも正しい手順を投稿できますか? このような他のいくつかの質問では、バグが言及されていますが、現在は修正されているようです。私はこれより古いデルフィビルドを持っています。

更新: また、RunTime エラーに関するコメントも歓迎します。

4

2 に答える 2

5
  1. DLLプロジェクトをロードします。
  2. 実行パラメーターを変更して([実行] | [パラメーター])、ホストアプリをzippy32として指定します。32ビットファイルシステムリダイレクタを無効にするには、C:\ Windows\sysnativeパスを使用する必要がある場合があることに注意してください。
  3. コマンドライン引数としてDLLへのパスを含めます。
  4. Delphi COM自己登録コードでエラーが発生した場合は、おそらくデバッグDCUを有効にします。

ここに画像の説明を入力してください

次に、他のDLLと同じようにDLLをデバッグします。

ランタイムエラー216はアクセス違反です。

于 2012-08-28T12:03:59.933 に答える
1

1) この実行時エラーは、プログラムの終了に過ぎない可能性があります。たとえば、DllMain の内部をデバッグすると、出口点を簡単に通過し、終了した DLL をトレースしようとすることができますが、これは RE を介して行われます。プロセスの終了は、サブルーチンからの戻りのように見えるのではなく、特別なシステム API 関数への呼び出しのように見えます。しかし、デバッガーはそれを理解せず、今は死んでいるプロジェクトを追跡し続けます。

2) デバッグに RegSvr32.exe または TRegSvr.exe を使用する意味がありません。RegSvr32 が行うことは、DLL から事前定義された関数を呼び出すことだけです。DLL または RegSvr32 自体をデバッグしますか?

2.1) 後者の場合 - RegSvr32 のソースがあり、おそらくデバッグ シンボルがあると聞きましたが、Microsoft デバッガーを使用する必要があります。

2.2) 前者の場合、これらの関数を呼び出す方法に違いがあり、それらの関数をデバッグするだけで済みます。DLL を TFileRun および regsvr32 に登録するときに見つからないファイルから任意のコードを取得し、それをホストとして使用します。

于 2012-08-28T12:53:28.850 に答える