問題タブ [tlbimp]

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.

0 投票する
0 に答える
632 参照

c# - 自動ビルドに「COMReference」の代わりに「COMFileReference」を使用していますか?

継続的インテグレーション サーバー (Jenkins) に Windows Mobile 6.0 C# プロジェクトを配置しようとしています。

TLB を参照するプロジェクトをコンパイルしようとすると、エラーが発生します: ResolveComReferencesalways return TYPE_E_LIBNOTREGISTERED。異なる開発者間でプロジェクトを渡す場合でも、参照を再度追加する必要があります。

COMFileReferenceの代わりにを使用して、プロジェクト ファイルに実行できる変更に関する何かを見つけましたCOMReference

.csproj ファイルを変更せずにこれを解決する方法はありますか?

0 投票する
0 に答える
765 参照

com - COM InterOp を介して複数のインターフェイスを公開する CoClass にアクセスする方法は?

以下のように説明されている CoClass があります。

だから私の質問は:

  1. 両方のインターフェイスを表示するのに、インターフェイスtlbimpのみを公開するのはなぜですか?IFoooleview.exe
  2. tlbimpインターフェイスのみを公開[default]し、その理由は? (MSDN によると、[default] 「マクロ言語による使用を意図しています。」 )
  3. このケースを MIDL/COM でモデル化するにはどうすればよいですか? 継承の代わりに関連付けを使用する必要がありますか?
0 投票する
1 に答える
865 参照

c# - TLBIMP と AXIMP の結果の違い

ActiveX COM コントロールとそのソース コードがあります。メソッドの入力パラメータの1つを変更したかったので、IDLなどを変更してCOM DLLとTLBを生成しました。

しかし、COM DLL を .NET プロジェクトにインポートすると、メソッドは古いシグネチャを保持していました。そこで、AXIMP を使って ActiveX DLL を生成してみました (まったく同じですが、試してみたかったのです)。

それでも、メソッドの署名は私が変更したものに変わりませんでした。

しかし、生成された TLB ファイルから TLBIMP を使用して相互運用 DLL を生成すると、メソッド シグネチャが正しく変更されました。

どこが間違っているのでしょうか?

ありがとう。

0 投票する
1 に答える
2682 参照

.net - 相互運用DLLを簡単に更新するにはどうすればよいですか?

VS 2005(VB .Net)に.NETプロジェクトがあると仮定します。このプロジェクトは、非GUICOMオブジェクトを使用します。このオブジェクトへの参照を追加すると、VSは相互運用DLLを作成します。しかし、別のプロジェクトのCOMオブジェクトに新しいメソッドを追加します。明示的に呼び出さずに相互運用DLLを更新するにはどうすればよいtlbimpですか?IntellisenseにこのCOMオブジェクトの新しいメソッドのリストを表示させたい。

0 投票する
0 に答える
786 参照

c# - 生成された C# 相互運用 DLL での COM OLE_HANDLE タイプの不一致

私は、使用しているコア C# アプリケーションの依存関係である Microsoft Visual C++ COM プロジェクトを継承しました。プロジェクトを再コンパイルし、(tlbimp を使用して) 相互運用 DLL を再生成すると、OLE_HANDLE を受け取るライブラリ内のいくつかのメソッドが、以前のバージョンの相互運用 DLL から署名を変更します。

以前の相互運用性が生成されたとき、私は周りにいませんでしたが、Windows Server 2003 / Windows XP 上の VS2005 でコンパイルされたことはほぼ確実です。私のワークステーションは現在、Visual Studio 2010 (x64 用の C++ Visual Studio Compiler バージョン 16.00.40219.01) を使用する Windows 7 です。

これは、元の DLL と新しい DLL (ILSpy を使用) 用に生成された C# インターフェイスです。

新しいインターフェイス(2 番目のパラメーターは、ComAliasName 属性を使用してマーシャリングされ、int として):

古いインターフェイス(2 番目のパラメーターは uint):

私が見る限り、入力 IDL ファイルは変更されておらず、OLE_HANDLE の定義に影響を与える #includes / 条件付きステートメントもないようです。

問題のメソッドが呼び出されるたびに、AccessViolationException がスローされます。

生成されたインターフェイスが変更された理由 (MIDL/TLBIMP の変更によってこの動作が発生するかどうかわからない) や、これをさらにデバッグする方法を知っている人はいますか?

ヘッダ:

メソッドの C++ ソース:

0 投票する
2 に答える
332 参照

c# - WriteProfileString などの静的 COM モジュールのインポート

WriteProfileString16 ビット バージョンの Windows との互換性のためにのみ提供され ている を使用する従来の VB 6 アプリケーションがあります。

私はそれを機能的に同等の (正確なクローンを意味する) .NET アプリケーションに移行しています。これには、 TlbImp.exeWriteProfileStringを使用して、COM オブジェクトの TLB ファイルから Interop アセンブリを生成する必要があります。これは必須であり、P/Invoke は使用できません。

そうすると、TlbImp.exe によって空のアセンブリが生成されます。

WriteProfileString次の IDL があります。

幸いなことに、Microsoft は、TlbImp2.exe という名前の TlbImp.exe の次のバージョンをオープン ソース化しました。
コードをデバッグすることができ、TlbImp.exe と TlbImp2.exe の両方がモジュールからメソッドをインポートしないことがわかりました。TlbImp2.exe にモジュールの静的メソッドをエクスポートさせるために、コードをハックする必要がありました。

ConvModule.csファイルを変更する必要がありました。

そして、次のメソッドをConvCommon.csに追加します。

そのため、メソッドが正しくエクスポートされるようになりましたが、そもそもこれらのメソッドをエクスポートしなかった理由はまだ疑問に思っています。

これは、エクスポートされたアセンブリのコードです。

抽象メンバーを持つ静的クラスを生成します。それは意味がありません。もちろん、コードを変更して別の方法でエクスポートすることはできますが、そもそも TlbImp2.exe がそうするのはなぜですか?

モジュールの定数をエクスポートするため、そのようにエクスポートすると想定しています。私は正しいですか?WriteProfileString相互運用で確実に使用できるようにするには、メソッドにどの修飾子を適用する必要がありますか?

0 投票する
2 に答える
1804 参照

c# - csproj から Exec tlbimp への msbuild パスは何ですか?

csproj でコーディングしているビルド前のターゲットを実行したいと考えています。これは、プロジェクトが参照する dll を生成するために tlbimp を実行する必要があります。

tlbimp を実行しようとしていますが、見つからないというエラーが発生します。パスを推測するために使用できる msbuild 変数または環境変数はありますか?

0 投票する
1 に答える
2980 参照

c# - MIDL が tlb を作成できない場合はどうしますか?

C# インプロセス サーバーを作成しようとしていますsbtsv.idl(これは Windows 8 SDK に含まれています)。私が見つけたほとんどすべての指示ではMIDL.tlbファイルtlbimportを作成してからプロキシ dll を作成するように指示されています。

ただし、IDL にセクションが含まれていない場合、libraryファイル.tlb生成されず、セクションは含まれsbtsv.idlませんlibrary

ライブラリ内に作成したいインターフェースを宣言したIDLファイルを自作してみた

ただし、実行しようとするとMIDL、次のエラーが発生します

クラスとインターフェースを手作業で書かなければならないと思っていますが、これが機能するのに何か間違ったことをしていないかどうかを確認したかったのです。

0 投票する
1 に答える
878 参照

c# - インポートされたアセンブリの CoClass インターフェイスは正確には何のためですか?

ツールを使用して基本タイプ ライブラリをインポートすると、tlbimp.exe常に各 のインターフェイスが作成されますcoclass。たとえば、この IDL 記述

結果:

  • COMインターフェイスIFooの表現としてのインターフェイス、
  • BarClassCOM コクラスの表現としてのクラスと
  • Barで注釈が付けられたインターフェイスCoClassAttribute

Barとの GUIDIFooが等しい場所。MSDNは、このトピックについて次のように述べています。

このインターフェイスは、コクラスの既定のインターフェイスと同じ IID を持っています。このインターフェイスを使用すると、クライアントは常にイベント シンクとして登録できます。

それが私がこのトピックで見つけた唯一のものです。CoClassAttributeにより、インターフェイスを使用して実際のクラスのインスタンスを作成できることを知っています。BarClassまた、(実際には) を使用してクラスの新しいインスタンスを作成できることも知っています。私が理解していないのは、イベント ソースが定義されていないため、イベント シンクを接続できないBar場合でも、インポート プロセスがインターフェイスを生成する理由です。coclass

Barこの例でインターフェイス1を削除することは可能でしょうか、それともまだ考慮していない他のリスクがありますか?

1 たとえば、相互運用アセンブリを分解します