C++ dllとDelphi dllの間には本当の違いがありますか? アプリケーションはC++ dllのみを読み込みます。 呼び出し規約をcdeclに変更することは役に立ちません dllがC++のDLLであるかどうかを調べる方法はありますか? そのDLLの利点は何ですか? 私は、Delphi dllがパラメータを持つことができ、Delphiのタイプを返すことができることを意味します。の、C++ dllとDelphi dllの相違点
答えて
ため
おかげで、いくつかの排他的なデータ型を有することができますC++固有のアイテム(C++クラス、テンプレート関数など)を使用または公開し、Delphi DLLがDelphi固有のアイテム(セット、文字列など)を公開する可能性があります。しかし、両方が適切に書かれていて、他の言語でも使えるものを使うだけであれば、違いはありません。
事実、すべてのC++ DLLまたはDelphi DLLが正しく書き込まれているわけではありません。また、Delphiのデフォルトの呼び出し規約はregister
(C++ Builderでは__fastcall
)ですが、CおよびC++ではデフォルトでcdecl
が使用されています。しかし、一般的には両方の言語でstdcall
を使用する必要があります。
DLLを使用する唯一の方法は、ヘッダーファイル(.h)またはDelphiインポートユニットを取得することです。 .hファイルはインポート単位に変換できます。 DLLのみを持っていてもこれらのDLLはない場合、関数のパラメータを推測しようとするのはあまり意味がありません。
TDUMP.exeまたはDependency Walkerを使用してDLLを見ると、別の答えで述べたようにヒントが得られる可能性があります。例えば依存性。 msvcrtXX.dllはC++ DLLのヒントかもしれません。
また、DLLから.tlbを取得することもできます。 IDEでこれを行うことができます(メモリから: "コンポーネントメニュー" - "コンポーネントのインポート"など)。
呼び出し規約を知りたい場合は、this、特に呼び出し規約を調べる部分を読んでください。
追加
いくつかのC++プログラマは、エクスポート機能がマングルされているので、extern "C"
ブロックで自分の宣言をラップすることを忘れ。これにより、どのパラメータが必要かを知ることができますが、醜い名前が付けられます。これのために、Dependency Walkerは、(VC++で生成されたDLLまたは互換性のあるDLLのために)少なくとも翻訳することができるので、大きな助けとなります。しかし、それは別のC++コンパイラやCコンパイラの関数をかなりハードに使っています。
しかし、IIRCはC++のDLLであるかどうかはわかりません。 OK、msvcrtの呼び出しはヒントかもしれませんが、必ずしもそうである必要はありません。私はそれを使用するDelphiコードも書いています。 –
DLLは言語に依存しないはずです。あなたが知る必要があるのは、エクスポートされた関数の名前とパラメーター/戻り値の型だけです。 –
DLLはそうでなければなりませんが、あまりにも頻繁ではありません。特に言語を知っている人がDLLを作っている場合はそうです。私はそうでなかったDLLのかなりの翻訳を手伝ってきました。 –
C++のDLLができます。そのC++のdllのよう は/あなたがたDLL内の関数を検討する依存関係ウォーカーを使用することができます任意のヒント
?なぜdownvote? –
- 1. TVarData x86とx64の相違点Delphi
- 2. JavaとDelphi .NETの相違点
- 3. Delphi DLL comport
- 4. VB6とC++のDLLでMSVBVM60.dllのアクセス違反
- 5. Delphi XE6からC#dll関数を呼び出すアクセス違反
- 6. Innoセットアップアクセス違反のC#DLL
- 7. Delphi以外のCOM DLLインターフェイスをC#
- 8. Win32のC++ dllとマネージC++ dllのマージ
- 9. function EXE to DLL(Delphi)
- 10. C#でDelphi DLLを使用する
- 11. DelphiとC++、DLLがエクスポートされた関数で、私はDLLを持って
- 12. DLL内のdelphi finalizalizationコード
- 13. DelphiでCOMオブジェクトとしてC#またはC++ DLLをインポート
- 14. JavaとC#と.NETの相違点
- 15. C#:NumberDecimalSeparatorとCurrencyDecimalSeparatorとの相違点
- 16. LIBとDLLの違い
- 17. Delphi 2010アプリケーションDelphi 7 DLLをロード
- 18. C++ const positionの相違点
- 19. C#dllとvC++ dllの中で、COM dllの登録無料起動がどう違うのですか?
- 20. アクセス違反OpenCVのC++のdll
- 21. IE標準、相違点および相違点の相違点
- 22. JAVAとC#のLdapConnectionの相違点
- 23. C#でのWriteableBitmapとビットマップの相違点
- 24. ASP.NET(C#)の "Controls.Add()"と "this.Controls.Add()"の相違点
- 25. リファレンスC++ランタイムDLL from .net dll
- 26. importとconstとの相違点とcommonjsでの相違点
- 27. C++ OOPとPHP OOPの相違点
- 28. =と:=の相違点
- 29. C++ - DLL
- 30. DLL間の相互作用
DLLを調べて呼び出し規約を判断する簡単な方法はないと思います。また、C++からC関数をエクスポートすることもできますが、クラスをエクスポートすることはできません(同じコンパイラの異なるビルドや異なるコンパイラ間でも互換性があります) –
duplicate of [ C++ dll?](http://stackoverflow.com/questions/2277986/can-i-programatically-deduce-the-calling-convention-used-by-ac-dll) –
何をしようとしていますか?リンクするDLLを実装するために使用された言語を気にする必要はありません。 –