問題タブ [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.
com - 非拡張属性を持つ COM インターフェイスで継承は許可されますか?
次のように、別のインターフェイスから継承するインターフェイスがあります。
ICollection の実装は、IB を実装するオブジェクトを返します。そのオブジェクトは、ディスパッチ インターフェイスを介して MethodA および MethodB へのアクセスを提供します。実行時にメンバーが追加されることはありません。
この場合、IA の非拡張属性は許可されますか?
c++ - Visual Studio でタイプ ライブラリをインポートする正しい方法は何ですか?
バックグラウンド
私たちのビルドは、ant とカスタム タスクを使用して、Visual Studio プロジェクト/ソリューションと一部の Java プロジェクトをビルドします。その構造は基本的に大きなツリーであり、プロジェクトからの成果物は通常、共通のビルド ディレクトリにコピーされます。
これは以前は完全に混乱していましたが、ant スクリプトを大幅に簡素化し、現在は Visual Studio プロジェクト/ソリューションのほとんどを使用しています。これらのプロジェクトは非常に古く、2013 年までのすべてのバージョンの Visual Studio でアップグレードされています。私が行った変更の一部は、既定のプロジェクト プロパティとマクロをできるだけ多く使用することでした。これらのほとんどは、以前はハードコードされていました。
$(Configuration) マクロを使用して成果物をさまざまな構成から分離するようにプロジェクトを変更しましたが、これらは他のソリューションの他の依存プロジェクトの共通の場所にコピーされます。そのため、混乱を避け、実際にデバッグ ビルドがすべてのデバッグ ライブラリにリンクしていることを確認するために (以前は発生していませんでした)、ターゲット名にサフィックスを追加しました。たとえば、デバッグ Unicode ビルドのターゲット名は $(ProjectName)DU になります。
問題
これまでのところこれは素晴らしいことですが、COM ライブラリの 1 つでこれらの変更を完了する方法がわかりません。このライブラリには IDL ファイルがあり、MIDL コンパイラは TLB ファイルを生成します。これは良い方法ではないかもしれませんが、今のところ、ビルドに応じて TLB ファイルにも異なる接尾辞を付けたいと思いました。問題は、MIDL 構成のタイプ ライブラリ プロパティを変更すると、RC ファイルのコンパイル時ディレクティブが壊れることです。_UNICODE または _DEBUG が設定されているかどうかに応じて、TEXTINCLUDE ブロックで #ifdefs を使用できる可能性があると考えました (RC ファイルを壊さないように [リソース インクルード] ダイアログを介して行う場合)。また、#ifdef チェックが必要な他の importlib 属性があることも意味します。
現時点では、TLB ファイルの名前を変更しなくても機能しますが、それは現在、このソリューション内でのみ使用されているためです。
誰かがこのようなことをしたことがありますか、またはより良い解決策を知っていますか?
アップデート
ここで本当に知っておく必要があるのは、ある COM DLL の型を別の COM DLL で使用する最良の方法は何ですか? importlib を使用する必要がありますか? MSDN のドキュメントによると、ほとんどの場合、代わりにインポートを使用する必要があります。私はこれを試しましたが、たくさんのものを壊しました。
c++ - importlib 属性使用時の MIDL2015 警告
複数のプロジェクトを含む従来の Visual Studio ソリューションがあります (Visual Studio 2013 にアップグレードされています)。これらのプロジェクトの 1 つは、COM DLL を生成します。次に、この DLL からの TLB は、importlib 属性を介して別のプロジェクトの IDL ファイルにインポートされます。MIDL コンパイラが依存プロジェクトの IDL ファイルをコンパイルしようとすると、次の警告が生成されます。
警告 MIDL2015: importlib で tlb を読み込めませんでした
TLBファイルへのフルパスを使用すると機能します。
MIDL -> 追加のインクルード ディレクトリ プロパティにパスを追加しようとしましたが、これは IDL、ヘッダー、および ACF ファイル ( /I switch ) のみに対応していると思います。
Linker -> Additional Library Directories プロパティも試しましたが、これもうまくいきませんでした。
importlib 属性を解決するときに MIDL が使用する検索パスは何ですか?
com - Microsoft IDL の「バージョン」属性
私の質問は、version
COM インターフェイスとクラスと列挙型を定義する IDL ファイルでのタグの正しい使用法は何ですか?
MSNのドキュメントは紛らわしいです。「備考」の下の最初の段落では、インターフェイスで何かが変更された場合は IID を変更する必要があると明確に述べているようです。
しかし、ページの残りの部分ではversion
、同じ IID で異なる を使用する方法について説明します。での使用を示すサンプル COM インターフェイスページの 1 つさえあります。 version
interface
どうしたの?
追加の質問: ?version
での使用は許可されていenum
ますか? MIDL 7.00.05555 は のversion
属性を受け入れますがenum
、バージョン管理された列挙型が関数パラメーターとして使用されている場合、MIDL はエラーを返します。
com - COMのフラグに「列挙型」を使用できますか?
COM オブジェクトの IDL では、次のことを行います。
フラグの合計(またはビットごとのOR、同じこと)を取ることができる関数を持っています、例えば(IDLで)
使用目的の例は次のとおりです。
動作しているように見えますが、これは実際に許可されていますか、それとも RPC トランスポートなどで、列挙型定義に正確に含まれていない列挙型パラメーターの値が拒否される可能性はありますか?
windows - 連続するインターフェース関数 ID
私はmidlのようなCOMオブジェクトインターフェースを持っています
ID は連続している必要がありますか? または、次のように定義できますか
2 番目のバージョンのコンパイルは問題ないようですが、実行時に問題は発生しますか?
c++ - Microsoft インターフェイス定義言語 (.idl) のビルドをマルチ処理していますか?
.h と .c を生成する 200 個の midl ファイルを含む COM プロジェクト (Incredibuild を使用した Visual Studio) があります。この midl ファイルの処理は、ビルドの最初に 1 つのコアのみで行われます。これは非常に長く、実質的にビルド時間の半分を要します。
ビルドのこの部分をマルチプロセスすることは可能ですか?
Incredibuild の FAQ にあるように、MIDL ステップを配布できるはずです。 https://www.incredibuild.com/frequently-asked-questions-technical.html#q39
(私はすでに /MP を有効にしており、.c/.c++ のコンパイルは適切に並列ビルドされています。)
c++ - MIDL はインターフェイス名を変更します
COM Inter-op を使用する .NET アプリケーションによって消費される COM dll があります。CoClasses の 1 つには、IT6TrackData というインターフェイスがあり、TrackData という get プロパティが 1 つあります。
IDL ファイルから:
上記の IDL ファイルの TLB ファイルを表示すると、プロパティが trackData ( t は小文字) として表示されます。何らかの理由で、クライアント アプリケーションはこのプロパティを trackData として参照しており、今まではすべて正常に機能していました。
強化の一環として、上記のインターフェイスは put プロパティを持つようにアップグレードされました
上記の IDL ファイルの TLB ファイルを表示すると、プロパティが TrackData (t は大文字) として表示されます。これは、小文字の「t」で trackData を参照し続ける古い .NET クライアントを壊しています。 .
この KB 記事を確認しました http://support2.microsoft.com/kb/220137/en-gb
しかし、方法はありますか、この問題の修正を知っている人はいますか?
ご注意いただきありがとうございます。
IDL ファイル