問題タブ [midl]
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.
midl - MIDL インポート キーワードにより、多くのコンパイラ出力が生成される
.idl ファイルにインポートするたびに、次の出力が生成されます。
64 ビット処理 file.idl
そのため、処理された idl ファイルごとに 2 ページの出力があります。この洪水を減らす方法はありますか? 私にとって理想的なのは、C ++コンパイラが行うことと同じです.警告やエラーがなければ、入力ファイル名を含む1行の出力のみです.
/nologo および /W0 スイッチを試しましたが、役に立ちませんでした。何か案は?
c++ - C++ 公開プロパティ名が IDL で指定された名前と一致しない
C++ コンポーネントの IDL ファイルには、次のようなものがあり、プロパティを COM で表示できるようになっています。
dll をビルドして OLEView で開くと、次のようなメッセージが表示されます!?
IDがidとして表示されていることに注意してください。ただし、このコードを「ID2」に変更すると、ID2が期待どおりに表示されます。次に、「ID」に戻すと、再びidが表示されます。これは私にはかなり不可解です。このプロパティの DLL で公開されている名前が小文字であることを意味する何かがマシン上にあるはずですが、これに関するレジストリが見つかりません。
何か案は?非常に混乱...
types - IDLのポータブルアドレスオフセットパラメータ
古い32ビットCOMサーバーを64ビットアーキテクチャに移植しています。
多くの関数は、__int3264および__int3264ポインターのように、パラメーターとしてバッファーアドレスとオフセットを取ります。問題は、インターフェイスがIDispatchで継承されており、__ int3264が自動化インターフェイスでサポートされていないため、このタイプがx64で__int64として自動的に生成されないことです。
アドレスを期待する関数の場合、__int3264*をvoid*に置き換えます。
オフセットパラメータは、__ int3264およびLONG(両方とも自動化で32ビット+ x64)として配置されました。ハイパー(__int64としてマップ)は32ビットシステムで機能しなくなるため、使用できません。
すべてのオフセット/アドレスパラメータにvoid*を使用する必要がありますか、それともそれらをx64 COMサーバーに移植する別の方法がありますか?
c++ - VS2008C++コンパイラはプロジェクトのビルドを要求し続けます
重複の可能性:
VisualStudioはすべてを構築し続けます
同じプロジェクトの別のファイルに含まれる.cファイルを生成するidlファイルを含むプロジェクトがあります。
私はこのプロジェクトをビルドしましたが、すべて問題ありません。次にプロジェクトを実行しようとすると、プロジェクトが古くなっていると言われ、ビルドしたいと思います。はいを選択してビルドすると、idlが再度コンパイルされます。
ビルドのプロンプトが表示されないようにVSプロジェクト設定を設定せずにこれを停止する方法はありますか?
com - MIDLコンパイラエラー:MIDL
MIDLを使用してIDLファイルを.hおよび.cにコンパイルすると、次のようなエラーが発生します。
midl:コマンドラインエラーMIDL1004:Cプリプロセッサcl.exeを実行できません。
親切に助けてください、理由はわかりません。
私が使用しているMIDLコンパイラはVC++6.0の一部です。
ありがとう。
windows - DLL からの IDL ファイルの作成
私は、__declspec(thread)
変数を使用する C コードから生成された DLL を使用する VB6 グラフィカル インターフェイスに取り組んでいます。問題は、既知の制限により、VB6 プロジェクトでこの dll を動的にリンクできないことです。
したがって、このディスカッションで提案されているように、考えられる解決策は、DLL から IDL ファイルを作成し、MIDL コンパイラでコンパイルしてから、VB6 プロジェクトで結果の .tlb ファイルを参照することです。
構造体変数を含む関数を指定する必要があるまで、.tlb ファイルを生成できます。
行で: int myFunct([in] myStruct data);
コンパイラは言う:
syntax error: expecting a type specification near "myStruct"
それを機能させる方法はありますか?IDL ファイルのある種の構造体宣言のようなものですか?
ありがとうございました、
GB
ここでwqwによって解決されました。ありがとう
c++ - tlb のメンバー クラスの一部のみが登録される
既存の odl ファイルがあり、MIDL.exe を使用してそこから tlb を作成しました。レジストリを検索するときに、regtlib.exe を使用して tlb を登録しました。タイプ ライブラリ自体の ID とメイン ディスパッチ インターフェイスのみを見つけることができます。 、残りのコクラスとインターフェイスが見つかりません。それらを使用しようとすると、「クラスが登録されていません」というエラーが表示されます。注: 私は Visual Studio 2003 で VC++ を使用しています。VS のオブジェクト ブラウザー ウィンドウで tlb を表示でき、問題なく表示され、他のすべてのメンバー クラスが含まれています。
c++ - MIDL で C スタイルのヘッダー生成をオフにする方法はありますか?
IUnknown ベースのインターフェイスを記述する単純な .IDL ファイル (iface.idl) があります。
コンパイルしようとするとmidl /header iface.h iface.idl
、iface.h、iface_i.c、および iface_p.c の 3 つのファイルが生成されます。iface.h ファイルには、ISunpathCalc インターフェイスの C++ 宣言が含まれています。
このファイルの残りの大部分には、不要な C の内容が含まれています。
Q:ヘッダーの C++ 部分のみを生成するように MIDL に指示する方法はありますか? iface_i.c および iface_p.c ファイルの生成をオフにして、代わりに MIDL に強制的に C++ 定義を生成させることはできますか?
UPD1:
ここで指定されている [local] 属性を追加しようとしました:
しかし、何の成功もありません。
com - TypeLibraryからプログラムでIDLコードを取得する
次の手順を実行するコードを書いています。
.net .dllを登録し、regasm.exeを使用して.tlbを生成します
- .net .dllを登録し、regasm.exeを使用して.tlbを生成します
- typeLibraryからIDLコードを生成し、ファイルに保存します。
- IDLコードを編集して、小さな変更を加えます。
- Midl.exeを使用して、IDLを.tlbに再コンパイルします。
ご想像のとおり、私が固執しているステップはIDLの生成です。これは、Windows APIに付属のOleViewerを使用して手動で実行できることはわかっていますが、この手動の手順を削除したいと思います。
コマンドラインからOleViewerを操作したり、IDLコードを生成する他の方法を見つけたりすることはできません。
誰かアイデアがありますか?IDLを生成するコードはOleViewerのどこかにある必要があることを私は知っています...おそらくそれにアクセスする方法はありますか?
c++ - MIDL。idlにメソッドを追加した後、コールバックc ++インターフェイスが更新されないのはなぜですか?
私はCOMテクノロジーを使用してコールバックインターフェイスを実装しようとし、次のようなIDLを使用しています。
IMyClassにはSomeMethod宣言がありますが、プロジェクトを再コンパイル/再構築したときに、自動生成されたクラスに表示されない理由がわかりません。
常に空として宣言されます:
私がここで間違っていることは何ですか?