問題タブ [idl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
atl - 外部タイプ ライブラリから IDL にインターフェイスをインポートする
ATL と Microsoft の IDL を使用して記述した COM インターフェイスを備えた 2 つのタイプ ライブラリがあります。あるライブラリのインターフェイスを別のライブラリのインターフェイスから継承したいと考えています。
基本的には、Stevenが VS C++ で .tlb 型を使用してインターフェイス メソッドを作成するにはどうすればよいですか? で説明したのと同じことをしたいと思います。. 彼に答えた唯一の人は、質問を理解していないようでした。
コードでやりたいことは次のとおりです。
一部のライブラリ DLL/TLB
ISomeInterface.idl
SomeLibrary.idl
SomeOtherLibrary DLL/TLB
ISomeOtherInterface.idl
SomeOtherLibrary.idl
MIDLimport
ディレクティブは、IDL ファイルのインポート時にのみ機能し、DLL と TLB しかありません。定義importlib
内でしか機能しないため、使用できません。MIDL コンパイラは、Microsoft の C++ 、、および属性をlibrary
認識しません。import
importidl
importlib
何をすべきか?
visual-studio - oaidl.idlおよびocidl.idlの再コンパイルを防止
多数の IDL ファイルを含む COM/ATL プロジェクトがあります。これらのIDLファイルのほとんどは、import
oaidl.idlおよびocidl.idlです。
プロジェクトをコンパイルするたびに、Visual Studio は MIDL を呼び出して oaidl.idl と oidl.idl... を再コンパイルします。これら 2 つの IDL ファイルは最終的に何度も再コンパイルされるため、プロジェクトのコンパイルに時間がかかります。
Visual Studio で oaidl.idl と ocidl.idl を一度だけコンパイルするように強制する方法はありますか?
c# - IDLをC#にどのように変換しますか?
たとえば、DOM仕様にはさまざまなIDL定義があり、その1つがインターフェイスノードです。これを(この一部でも)実際のC#に変換するにはどうすればよいでしょうか。つまり、どこから始めますか?私が理解している限り、C#のインターフェイスは、IDLがここでインターフェイスと呼んでいるものとは大きく異なる動作をします。私が間違っている?
visual-studio-2008 - ウィザードを使用して作成されたATLプロジェクトは、未解決のシンボルが原因でコンパイルされません
Visual Studio 2008でコンパイルする基本的なATLプロジェクトの取得に取り組んでいますが、エラーが発生し続けます。最終的に、次のビルドエラーでスタックしました。
私は何を見落としているか、間違っているのですか?再現する手順は次のとおりです。
- 新しい
ATL Project
名前を作成しますSomeProject
。すべてのデフォルトを受け入れます。 - ソリューションエクスプローラーでプロジェクトを右クリックし、を選択します
Add > Class
。 - 短縮名として選択
ATL Simple Object
して入力します。SomeObject
他のすべてのデフォルトを受け入れます。
この時点で、プロジェクトは正常に構築されます。ただし、整理しやすくするためにIDLを複数のファイルに分割したいと思います(IDLは数千行の長さになります)。
- プロジェクトを右クリックして、を選択します
Add > New Item
。 - ファイル名として選択
Midl File
して入力します。ISomeObject
- インターフェイス宣言を開い
SomeProject.idl
て切り取ります。ISomeObject
に置き換えますimport "ISomeObject.idl";
。 - インターフェイス宣言をに貼り付けます
ISomeObject.idl
。
MicrosoftのIDLコンパイラを満たすには、いくつかのオプションを変更する必要があります。
- プロジェクトを右クリックして、そのプロパティを開きます。セクションに移動して
MIDL > Output
、次の値を入力します。- ヘッダーファイル:
$(InputName).h
- IIDファイル:
$(InputName)_i.cpp
- プロキシファイル:
$(InputName)_p.cpp
- タイプライブラリの生成:
No
- ヘッダーファイル:
- セクションに移動し、
C/C++ > Precompiled Headers
に設定Create/Use Precompiled Header
しNot using Precompiled Header
ます。プリコンパイル済みヘッダーを使用すると、後でエラーが発生します。 SomeProject.idl
プロパティが表示されるようにファイルを選択します。セクションに移動し、MIDL > Output
に設定Generate Type Library
しYes
ます。- フィルター
SomeProject_i.h
から取り外しSomeProject_i.c
ます。Generated Files
- 次の既存のアイテムを
Generated Files
フィルターに追加します。最初にプロジェクトのコンパイルを試みる必要があるかもしれません。SomeProject.h
SomeProject_i.cpp
ISomeObject.h
ISomeObject_i.cpp
さて、この時点で私はプロジェクトがコンパイルされることを期待します。しかし、そうではありません。LNK1120
この質問の上部にリストしたエラーが表示されるはずです。
何か案は?シンプルなものを見落としていますか?
atl - oaidl.idl と ocidl.idl の目的は何ですか?
既定の ATL シンプル オブジェクトには、IDL ファイルの先頭に次のものが含まれています。
これらのファイルは何のためにあり、いつインポートする必要があるかを知るにはどうすればよいですか? これら 2 つのファイルで定義されている内容を説明するドキュメントはありますか? 「oa」と「oc」が何を表しているのかわかりません。また、ファイル自体に役立つコメントもありません。
com - Midl を使用して .idl から .tlb を作成すると「型指定が必要」になる問題
私は、COM Interop として知られる野獣と長期にわたって遭遇してきました...
現在、OLE/COM オブジェクト ビューアによって生成された .idl ファイルから .tlb を生成しようとしています。ただし、Midl.exe を実行してコンパイルしようとすると、エラーが発生します。
私の .idl ファイルは 1000 行を超える長さなので、特にここに投稿したくはありませんが、関心のある部分は次のとおりだと思います。
それから数行後...
型指定エラーを修正するために、これらを尊重する必要があると感じています。ただし、これを行うと、新しい問題が発生します。
私はidl形式とmidl.exeの使用にかなり慣れていません。おそらく、私がやっていることに何か露骨な問題がありますか?
いつものように、どんな助けも大歓迎です:)
build-process - automake/Makefile.amを使用したIDLエンティティの生成
IDL(インターフェース記述言語)に慣れていない人のために、プラットフォーム(java、c、c ++など)で使用するためにデータ記述を抽象化します。私のプロジェクトには、Foo.idlから生成された依存関係Foo.c、Foo.h、FooHelper.c、およびFooHelper.hがあります。Foo.idlが変更されたときに任意のコマンドを実行し、ビルドプロセスにFoo.c、FooHelper.cを含めるにはどうすればよいですか?
私の現在の試みは、Makefile.amにルールを追加します。ルールが生成されたMakefileにコピーされることを期待しています。
私が試してみました:
次に、Foo.idlをmy_program_SOURCESに追加しましたが、ビルド時にthe_generate_commandを実行しません。
IDLからの生成に成功しました
ただし、Foo.c、FooHelper.cはコンパイルプロセスに追加されないため、ビルドされることはなく、the_generate_commandによって生成されるだけです。
すべてのコード(idlを含む)は$ PROJECT_DIR/srcにあります。
delphi - ファイルをridlに含める
私が取り組んでいる Delphi プロジェクトでは、COM サポートを追加するために非常に大きなタイプ ライブラリを作成する必要があります。Delphi のタイプ ライブラリ/ridl エディタの問題は、(プログラマの観点から) そのような大きなファイルを管理するのが難しくなることです。機能的な行に沿ってファイルを分割したいと思います。私が抱えている問題は、ridl ファイルを別のファイルに含める方法が見つからないことです。importlib 関数については認識していますが、同じプロジェクトで複数のタイプ ライブラリを作成する方法や、デルファイ内から tlb ファイルを作成する方法も見つかりません。これをより適切に管理する方法について誰かアイデアを教えてもらえますか?
com - 2 つの .IDL ファイルまたは 2 つの .tlb ファイルを 1 つのファイルにマージする
REGASM を使用して COM に公開する 2 つの .net dll があります。COM クライアント内での参照を簡素化するために、これらを 1 つのファイルにしたいと考えています。
両方のファイルを IDL に変換してから、一方のライブラリ セクションの内容を他方にコピーしてから、MIDL を使用して .tlb にコンパイルし直しました。これは 2 番目の IDL 内の TypeDefs では正常に機能しますが、コピーしたインターフェイスに関しては失敗するようです。コピペしました。
これに多くの時間を費やす前に、この方法で IDL を貧弱にすることが実際に可能であることを確認したかったのです。
interface - CORBA: CORBA IDL 型を別の型の属性にすることはできますか?
CORBA を使い始める前に知りたいことがあります。
IDL 型を別の型の属性として使用でき、その属性のメソッドを ("." を使用して) クライアント アプリケーションにも公開できることは直感的に思えます。
しかし、これは可能ですか?
例 (私の悪い IDL を許してください):
次に、クライアント アプリで次のことができます。myCar.brakePedal.press();
この種のマルチレベル オブジェクト インターフェイスを実行できない場合、CORBA はつまらないものに見えます。結局のところ、現実世界のオブジェクトはマルチレベルですよね? それで、誰かが私の心を落ち着かせて、これが確実に機能するかどうかを確認できますか (または、既に CORBA をセットアップしている場合は試してみてください)。IDL ドキュメントのどれも、これを例として明示的に示していないため、私は心配しています。ありがとう!