comのドキュメントでは、すべての言語で文字通り動作すると言います。あなたはその言語のための特定のAPIを持つ必要がありますので、それはcomとのインターフェースが可能ですか、どんな言語でもそのまま使えますか?また、特別なコンパイラが必要ですか?申し訳ありませんが、これは愚かな質問ですが、私はそれを以前に使用したことがない、私はこの答えを見つけることを試みている。私がcomのデモを見ると、すべてがCスタイルの構文でオブジェクトにアクセスしているように見えますが、他の言語(文字通りすべて)のバインディングとapiはありますか?comオブジェクトを扱うには、API固有の開発者が必要ですか?
答えて
COMの重要な点は、それが「バイナリ標準」であることです。つまり、メモリのビットとバイトが正しい場所にある限り、使用する言語は気にしません。
COMは基本的にすべてのCOMオブジェクトにメモリ内の特定のレイアウトが必要であることを指定しています。インターフェイスポインタはポインタを指します。ポインタは少なくとも3つのメンバを持つポインタを指します。 IUnknown関数(AddRef、Release、QueryInterface)へのポインタ、および残りはインタフェース内の他の関数へのポインタです。 COMは、引数がこれらの関数にどのように渡されるかを指定します。呼び出し元と呼び出し先がスタックの使用方法とその値をポップする方法に同意するようにします。
この要件は、C++がWindows上でどのように動作するかとうまく一致します。したがって、IUnknownを実装するほとんどのC++クラスは、有効なCOMクラスとして終了します。これは、MicrosoftのC++実装では、COMに必要なオブジェクトレイアウトを使用するためです.C++オブジェクトのvtableポインタはCOMポインタと同じです関数ポインタのC++テーブルは、COMがその関数テーブルポインタのために必要とするものであり、以下同様である。 COMは、MSのコンパイラが使用する技術であるC++オブジェクトがメモリに実装される最も一般的な方法を利用するように設計されている可能性があります。任意の特定のオブジェクトのレイアウト - だから、COMで使用できないクラスを提供する方法でC++を実装したサードパーティのC++コンパイラを使用することもできますが、壊れているように見えるので、 )
プレーンCでは、適切な構造体を含むポインタを手動で作成してCOMオブジェクトを作成できます。これは、Cが本質的に構造体のバイナリレベルのメモリレイアウトを手動で指定できるようにするためです。 COMが期待している適切なレイアウトを持つことがわかっている構造体を作成することができます。
他の言語、特にユーザーが明示的にメモリレイアウトを指定できない言語では、COMサポートを可能にする言語からのサポートが必要です。すべての.Net言語 - C#、VB.Netなど - .COMランタイムでサポートされているものを使用し、COMが期待するものを理解し、相互運用を可能にするために必要な適切なラッパーを生成します。
短い話ですが、太陽の下の言語は自動的にCOMで動作するわけではありません。実際には、C言語とC++言語の2つの言語が既にCOMの要件に対応しているケースがあります。他の多くの言語ではコンパイラのサポートが必要になります。
- 1. CakePHPの開発者間で必要なアプリケーションデータを共有
- 2. iOSプロビジョニングポータル - 有料の開発者である必要がありますか?
- 3. Android開発者はコマンドラインツールが必要ですか?
- 4. youtube api upload file - この操作に必要な開発者キー
- 5. ジュニア開発者はスタンドアップミーティングをどのように扱うべきですか?
- 6. COMオブジェクト - C#でCOMオブジェクトを開発する代わりに、型のオブジェクト
- 7. ユーザー固有の設定にはappname.exe.configが必要ですか?
- 8. Amazon APIのクエリごとに固有のIPアドレスが必要ですか?
- 9. 開発者と非開発者の間でios開発を共有する
- 10. DBモデルをオブジェクト固有のアクションとテーブル固有のアクションに分ける必要がありますか?
- 11. ASP.Net Coreの開発者固有のアプリケーション設定?
- 12. ウェブサイトやアプリの開発にはさまざまな開発者が必要ですか?
- 13. サービスに固有のtargetnamespaceが必要ですか?
- 14. Azure API管理 - 新しい開発者登録の承認が必要
- 15. 開発者がAWSに開発要件なしでインストールする
- 16. 初心者のAndroid開発者の質問 - カメラ固有の質問
- 17. COMサーバーにジョブキューが必要ですか?
- 18. 開発者はサンドボックスで作業する必要がありますか?
- 19. どのように私は開発者向けオプションがAPI 15
- 20. 各イテレーターには固有の「キー」小道が必要です
- 21. プロの開発者は、有料版のVisual Studioを持っている必要がありますか?
- 22. JavaScriptの開発者はjqueryを知る必要がありますか?
- 23. Google APIコンソールを他の開発者と共有する方法
- 24. .NETソリューションを扱うJava開発者に最適なリソース
- 25. React - Ignore:Refsには所有者の警告が必要です
- 26. npmパッケージのタイプ定義は開発者マシンでのみ必要ですか?
- 27. SharePoint開発者は、プロジェクトでグラフィックデザイナーとどのように連携する必要がありますか?
- 28. 新しいリリック開発者モードのトランザクショントレーサの詳細が必要
- 29. xcode 8の機能の下でクラウドキットを有効にするには、有料の開発者アカウントが必要ですか?
- 30. 固有のカスタムバリデーター名が必要ですか?
ほとんどの努力は実際にランタイムサポートライブラリに入ります。実際にCOM呼び出しを行うコード。コンパイラは、言語構造からランタイムサポート関数呼び出しへのバインディングを生成するだけで済みます。 IDispatchは、スクリプト実行時に使用される最も一般的なインターフェイスです。非常にシンプルで、7つのメソッドしかありません。 Plus CoInitializeExとCoCreateInstanceについては、それについてです。 –