問題タブ [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.
c# - 2 番目のアセンブリを必要とせずに tlbimp を使用しますか?
他のユーザーが使用できるように、C# dll に COM インターフェイスを実装しようとしています。foo.idl でインターフェースを定義しました。
tlbimp を介して foo.idl を実行し、.Net アセンブリである foo.dll を生成しました。インターフェイスを実装するために、dll で foo.dll を参照してインターフェイスを実装できます。
これは、1 つの例外を除いて、現状のままで完全に機能します。1 つではなく 2 つの dll を配布する必要があります。これは、実際に私が取り組んでいるプロジェクトの要件に反します: 1 つの DLL を提供します。
tlbimp dll を私のものにマージする方法、またはこれを行う他の方法 (2 番目の dll を使用せずに C# で COM インターフェイスを実装する) はありますか?
c# - C# で TLB (および tlbimp.exe) を使用することの欠点
電話に出る、電話を転送する、顧客と番号を照合するなどのことを行うために、通信会社のソフトウェアを自社のソフトウェアに統合しています。
彼らは、TLB ファイルを含む API ドキュメントを提供してくれました。tlbimp ツールを使用して、実装で使用するアセンブリを作成しました。
tlbimp によって作成されたクラスの一部には、内部コンストラクターが与えられているため、インスタンス化できません。別のクラスがこれらのクラスのインスタンスを返す必要があるため、このインスタンスでは問題ないと思います。
しかし、これは私に考えさせました.tlbimp.exeとTLB全体を使用するときに知っておくべき落とし穴は他にありますか? DllImport/ComImport/PInvoke コードを手動で作成した方がよいでしょうか?
c# - tlbimp がインターフェイスをコクラスに変換するのはなぜですか?
実際、ほとんどの場合tlbimp がインターフェイスを coclass に変換する機能です。具体的には、IDL にある場合
tlbimp は、それが実装する唯一のクラスであることを確認するためFirst
、IFirst
.NET インターフェイスを作成します。interface IFirst
class First
これはおそらく何らかの方法で役立ちます。
これはどのように役立つでしょうか?class First
とにかく同じメソッドを持つことになるためinterface IFirst
、何も追加されないため、その変換がなければ、interface IFirst
どこにでも渡してまったく同じ効果を得ることができます。この変換の用途は何ですか?
c++ - .net相互運用機能クラスを介したCOMC++コードへのデバッグ
C++プログラムからtlbimp.exeによって作成された.net相互運用レイヤーを介して使用されているCOMC++コードにステップインすることは可能ですか。COM C++dllのシンボルが[デバッグ]->[モジュール]ウィンドウにロードされていることがわかります。
visual-studio-2010 - Visual Studio IDEが実行しないtlbimpは何を実行しますか?
管理されていないC++で記述されたCOMDLLがあり、VS 2010でコンパイルされています。ベランダ32を使用してDLLを登録し、VBscriptを介して呼び出すことができます。
C#クライアントの作成中に参照を追加しようとすると、[参照の追加]->[COM]タブにCOMオブジェクトが表示されません。手動でDLLを参照して選択しようとすると、DLLが有効なアセンブリまたはCOMコンポーネントではないことが示されます。
これで、tlbimpツールを使用して相互運用機能DLLを生成し、それを使用してC#クライアントへの参照として追加できます。そして、すべてが正常に動作します。
私の質問は次のとおりです。
- 元のCOMが、zippy32を介して登録されたときに、[参照の追加]ダイアログの[COM]タブに表示されないのはなぜですか?
- VBScriptおよびC++ネイティブコードから呼び出すことができるのに、VS IDEが有効なCOMではないと考えるのはなぜですか?
- IDEができないtlbimpは正確に何をしますか?
- ここでのタイプライブラリと相互運用性についての理解を深めるために、さらに何を読む必要がありますか?
c# - C#でオブジェクトを作成するには?
次の VB6 コードを C# に翻訳したい
TlbImp.exe を使用して COM クラスのラッパーを作成し、次のことを試しました。
host
ただし、パラメーターを受け入れるコンストラクターはありません
c# - C#.net4.0で実行時にTLBをロードする
サードパーティのライブラリからのtlbファイルがあります。このライブラリには多くのバージョンがありますが、tlb内で使用する関数は一定です。つまり、バージョンごとに変更されません。
tlbファイルをCOMリファレンスとしてプロジェクトに追加しました。サードパーティのライブラリから関数を正常にビルドして呼び出すことができます。
アプリケーションを展開するとき、ユーザーが自分のPCに自分と同じバージョンのサードパーティをインストールすることを保証できません。このシナリオが発生すると、サードパーティライブラリ内の関数が呼び出されるとすぐにアクセス違反エラー(0xc0000005)が発生します。
実行時にユーザーのPCにあるtlbファイルをロードするにはどうすればよいですか?
tlbimp - TlbImpが参照型ライブラリの相互運用機能アセンブリを生成しないようにする
を使用して相互運用機能アセンブリを生成してTlbImp
います。私のタイプライブラリのいくつかは、単一のコアタイプライブラリを参照しています。
私が敵対するとき、私はとTlbImp
をFirst.dll
得る。問題は、に対してそれを再度実行すると、再度生成しようとし、エラーが発生することです。Interop.First.dll
Interop.Core.dll
Second.dll
TlbImp
Interop.Core.dll
TlbImp
参照されるアセンブリの相互運用機能を生成しないようにするにはどうすればよいですか?
c# - Windows7でTLBIMPラッパーを使用して独自のCOMコンポーネントを参照およびアクセスする方法
TLBIMP.EXEを使用して、商用のクローズドソースプログラムのラッパーを作成しました。(プログラムはVB6で参照できますが、Visual Studioで直接参照することはできません。)VSはラッパーを適切に参照し、オブジェクトを作成できます。ただし、オブジェクトのメソッドを呼び出すとすぐに、次のエラーでクラッシュします。
{"タイプ'InfoWorksLib.InfoWorksClass'のCOMオブジェクトをインターフェイスタイプ'InfoWorksLib.IIW'にキャストできません。IIDを持つインターフェイスのCOMコンポーネントに対するQueryInterface呼び出しが原因で、この操作は失敗しました' {61305DAA-3868-41AD-956D-081010E80E8B }'は、次のエラーのために失敗しました:そのようなインターフェイスはサポートされていません(HRESULTからの例外:0x80004002(E_NOINTERFACE))。 "}
私のコードは次のようになります:
宣言と作成の可能なすべての組み合わせを試しました(例InfoWorks iw = new InfoWorksClass()
など)
VSのオブジェクトエクスプローラーは次のことを示しています。
これはWindows7の場合です。WindowsXP仮想マシンでは、同じコードが正常に機能します。
上記の例外を引き起こしている可能性のあるWindows7のセキュリティ問題はありますか?ラッパーアセンブリは、システム以外のディレクトリに配置する必要がありますか?
c# - Visual Studio で VB6 参照を追加すると、「型検証中にタイプ ライブラリ インポーターでエラーが発生しました」というメッセージが表示される
私は、VB6 で書かれたかなり大きなプロジェクトを C# に変換しようとしています。移行するプロジェクトの規模を考慮して、移行は 18 か月にわたって段階的に行われます。VB6 ActiveX dll の参照を .Net プロジェクトに追加する際に問題が発生しています。
これらの手順を正確に実行すると、問題を再現できるはずです。
COM が表示される .Net でインターフェイスを作成しました。
プロジェクトのプロパティの[コンパイル]タブで[COM相互運用に登録]を選択すると、TLBファイルが取得されます。
この TLB を参照する VB6 プロジェクトと、公開されたインターフェイスを実装するクラスを作成しました。
VB6 のプロジェクト プロパティの [コンポーネント] タブで [リモート サーバー ファイル] を使用するように設定すると、コンパイル時に TLB が自動的に作成されます。OleView でその TLB を表示すると、次のように表示されます (.Net プロジェクトで定義されたインターフェイスの VB6 で行われた具体的な実装の詳細に加えて):
ここで、まったく新しい .Net プロジェクトを作成します。VB6 dll への参照を追加すると、次のエラーが発生します。
COM 参照 " ef005573-bfc7-436d-a382-f906ca09f94a " バージョン 3.0 を解決できませんでした。タイプ ライブラリ インポータで、タイプの検証中にエラーが発生しました。クラスメンバーなしでインポートしてみてください。
ただし、Visual Studio コマンド プロンプトを起動して次のコマンドを実行すると、次のようになります。
次に、その dll を .Net ソリューションの参照として追加すると、完全に正常に動作します。
私の質問。コマンド ラインで tlbimp が実行していて、参照を直接追加しただけでは実行されていないのは何ですか? Visual Studio のメッセージに「クラス メンバーなしでインポートしてみてください」というメッセージが表示された場合、Visual Studio 内でそれを行うにはどうすればよいですか? 私はtlbimpでそれを行う方法を知っています。
テキストの壁で申し訳ありませんが、関連性があると感じた情報を維持できるように、状況をできるだけ説明したかったのです。