問題タブ [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.
c++ - 関数ポインター typedef は MIDL で 1 回だけ許可されますか?
ここに簡単なテストがあります。関数ポインター型 FN_t は ITest::Test と ITest::Test2 で 2 回表示されます。
エラー メッセージ: midl\oleaut32.dll: エラー MIDL2020: タイプ ライブラリの生成エラー: SetFuncAndParamNames が失敗しました: __MIDL____MIDL_itf_test_0000_00000000 (0x8002802C)
!error! をコメントすることによって 行、MIDL はうまく機能します。では、なぜ、どのようにコードを機能させるのでしょうか?
================================================== ================================
自分で答えてもいいと思います。
単一の ITest::Test メソッドの場合。生成された typelib のインターフェイスは次のとおりです。
タイプライブラリは、関数ポインタの型が何であるかを認識していないようです。
次に、wire_marshal 属性を追加すると機能します。
windows - midl が C プリプロセッサ cl.exe を見つけられない
arith.idl ファイルを midl でコンパイルしようとしています。Windows 7 pro を実行しています。
PowerShell プロンプトで起動するコマンドは次のとおりです。
私は Windows RPC プログラミングの初心者です。助けていただければ幸いです。これを読みましたが、何も解決しません (同じ症状)。また、次のコマンドでプリプロセッサ cl.exe を指定しようとしました。
このコマンドは何も返さず、
False を返します
編集:
vcvarsall.bat ファイルを実行しても何も変わりません。起動したpowershellコマンドの出力は次のとおりです。
com-interop - bits.idl をコンパイルおよびインポートするときに、追加の GUID 型定義を取得するのはなぜですか?
COM BITS APIに対して .NET コードを書いています。Windows キットの下にある bits.idl ファイルを見つけて実行すると、bits.tlb がmidl bits.idl
得られました。次に、実行tlbimp bits.tlb
して BackgroundCopyManager.dll を取得しました。
このアセンブリ (私の .net プロジェクトで参照) ではすべてが期待どおりであり、VS 2013 のオブジェクト ブラウザーに表示され、ildasm で適切に表示されますが、1 つの例外があります。BackgroundCopyManager 名前空間に新しい GUID タイプが追加されましたが、これは本当に必要ないと思います。
System.Guid は、.NET 側の GUID、CLSID、および IID 関連のすべてのニーズに十分対応できると考えていました。どうにかして余分なものを取り除くことはできますか?System.Guid とこの偽者の間のキャストは簡単ではなく、必要ないように思われます。
私が把握できる唯一のことは、これらのインターフェイスにはパラメーターの型として GUID を使用するメソッドがいくつかあるということです。この idl ファイルは 2000 年のものなので、.NET 相互運用機能はまだ機能していなかったと思います。
com - COM IDL 構文に関する 2 つの簡単な質問: スレッド モデルを指定する方法はありますか? また、「引数なし」と言うには void が必要ですか?
MSDN や一般的なインターネットを検索しても、答えが見つからないように見える 2 つの単純な COM IDL ファイルの質問:
インターフェイスが STA オブジェクトによってのみ実装されるように指定できるインターフェイス属性はありますか? それとも、これはドキュメントだけの詳細ですか?
[object, local]
非リモート (インプロセス) COM オブジェクトに対して正しいと思われるものを既に持っています。void
メソッド宣言 (C など) の括弧内に引数を指定しない必要がありますか? MSDN はこれについて一貫性がありません。ヘッダファイルも同様です。このインターフェイスの私自身の個人的な実装は C で行います。
ありがとう。
c++ - 前処理ディレクティブの後に (生成された) トークンの gcc 警告を回避しますか?
Microsoft の MIDL コンパイラは、この抜粋のコードのように、わずかに無効な C/C++ ソース コード ファイルを生成します。
後のトークン#endif
は Visual C++ によって無視されますが、Holy Standard では何も要求されないため、g++ エラーが発生し、gcc (C としてコンパイル) でさえ警告が生成されます。
コードが生成されるたびに手動で修正するのは面倒で面倒です。
gcc がコードをコンパイルする必要があると仮定して、この明らかに名前のない警告を回避するためのより良い方法はありますか?
this に関する既存の質問を大まかに見ましたが、役に立ちませんでした。
winapi - MIDL コンパイラを呼び出して .IDL ファイルから .TLB ファイル (タイプ ライブラリ) を生成するにはどうすればよいですか?
一見非常に単純な問題に取り組んでいます。MIDL コンパイラを使用して.tlb
、ファイルからタイプ ライブラリ (ファイル)を生成したいと考えてい.idl
ます。ただし、MIDL で.tlb
ファイルを生成することはできません。
これは私のFoo.idl
です:
これは、MIDL コンパイラを呼び出す方法です。
次の出力がコンソールに書き込まれます。
Foo.h
MIDL コンパイラは、 、Foo_i.c
、Foo_p.c
... の3 つのファイルを生成しますが、 Foo.tlb
. 私は何かを誤解していますか、それともここで何が間違っていますか?
windows - Windows で Hadoop をコンパイルするときに「ammintrin.h」がありませんか?
UPDATE-2
Windows SDK コンパイラを更新したところ、エラーが 2 に減りました。
どこを検索しても、この .h ファイルを取得するには、Microsoft Visual Studio Service Pack 1 をインストールする必要があることがわかりました。Visual Studio がなく、Windows SDK 7.1 を使用しています。さて、Windows SDK 7.1 の同等の Service Pack 1 はどこにありますか?
更新-2 終了
UPDATE
しばらくの間スタックトレースを見つめた後、ここでエラーが発生していることがわかります
だから、私はこのコマンドだけを実行しようとしました
今、私は次のエラーを受け取ります
ファイル oaidl.ild を検索したとき。フォルダで見つけました
これを PATH に含め、同じエラーでコマンドを再度実行しました。ファイル名が「oaidl.idl」ではなく「OAIdl.Idl」になっていることに気付きました。
ファイル hadoopwinutilsvc.idl の最初の行は「include oaidl.idl」です。
これは、これらが Hadoop ソースのエラーであることを意味しますか?
END UPDATE - 以下の元の質問。
Windows 7 x64 で Hadoop を構築しようとしています。
次のエラーが発生し続けます。
関連するスタック トレースを以下に示します。どんな助けでも大歓迎です。
コマンドプロンプトで実行したコマンドは
mvn package -Pdist,native-win -DskipTests -Dtar
midl - カスタム文字列値属性を追加する MIDL コンパイラ
結果の COM dll ビルドで、MIDL コンパイラが結果のインターフェイス定義にカスタム属性を追加しないようにすることは可能ですか? 文字列値属性の挿入により、MIDL コンパイラによって追加された属性によって dll が失敗し、「オートメーション サーバーはオブジェクトを作成できません」というエラーが発生するのではないかと考えています。これらの情報は、Oleview.exe の Itypelib ビューアによって抽出されます。
これは、DLL の作業バージョンからの定義であり、MIDL バージョン 8 で Visual Studio 2013 を使用しているときにコピーしようとしているものです。