問題タブ [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# - .Net から COM への相互運用テスター
COM に公開するクラスを C# で作成しました。RegAsm.exe を使用して問題なく登録できます。
送信する前にテストしたいのですが、TlbImp.exe を使用すると、「Type libaray は CLR アセンブリからエクスポートされ、CLR アセンブリとして再インポートできません」というエラーが表示されます。
これをテストする良い方法は何ですか?
.net - 登録されたTLBを使用してCOMメソッドへの呼び出しをマーシャリングしないように.NETを作成するにはどうすればよいですか?
現在の構成は次のとおりです。
- メインアプリケーションは管理されていません。
- これには、COMモデルに公開される関数を記述するTLBを含むDLLが含まれています。
- ASMX Webサービスをサポートするために、.NET Frameworkをロードし、Webサービス呼び出しを提供するASP.NETドメインを開始します。
- Webサービス呼び出しを提供するには、メインアプリケーションからのデータが必要です。したがって、TLBから(tlbimp.exeを使用して)相互運用機能アセンブリを生成し、Webサービスアセンブリはこの相互運用機能を使用してメインアプリケーションのCOMオブジェクトと通信します。
バージョンで問題が発生するまで、すべて問題なく動作します。2つのバージョンのアプリケーション(2つのバージョンのTLBを含む)が同じコンピューターにインストールされた場合、両方のバージョンのTLB(たとえば、2.0と2.1)が登録され、下位バージョンは機能しなくなります。ProcessMonitorは、バージョン2.0インスタンスのWebサービスを呼び出そうとすると、レジストリでTLBのGUIDを調べ、バージョン番号を持つすべてのサブキーを読み取り、最後のバージョン(2.1)を取得して、その内容の読み取りを開始することを示しています。その後、バージョン2.1のDLLを読み取り、マーシャリングの問題のため、私が理解している限り、独自のプロセス内でCOM呼び出しを行うことができません。
インプロセスCOM呼び出しを行うためにTLBの存在(少なくとも登録済みTLBの存在)を必要としない相互運用機能を作成するにはどうすればよいですか?
前もって感謝します。
com - コマンド ラインで COM exe から TypeLib を抽出する方法
最近、相互運用アセンブリを作成する必要がありました。いくつかのグーグルの後、私は発見しtlbimp.exe
ました。次の問題は、COM ライブラリに.tlb
ファイルが付属していないことでした。さらにグーグルで調べると、タイプ lib が exe/dll のリソースとして含まれていることが多いことがわかりました。案の定、VS2010 で exe を開くと、タイプが lib であることがわかり、後で右クリックすると、tlbimp
. 素晴らしい。
ただし、これはあまり良いプロセスではありません。今後これを行う必要がある場合、コマンド ラインを使用して .exe から Type Lib (.tlb ファイル) を抽出する方法はありますか?
windows - tlbimpによって生成されたCOMラッパーはOSのバージョンに依存しますか
tlbimp.exeを使用してwuapi.dllのInteropdllを生成しています。tlbimp.exeによって生成されたこの相互運用DLLは、OSのバージョンに依存しますか?
クライアントマシンにパッケージ化してインストールする必要がある場合、パッケージ化する必要があるwuapi.dllへの依存関係はありますか?
詳細については:
.net - .NET+COMの相互運用性を理解する
.NETアプリケーションからTLBIMP.EXEで作成されたCOM/DLLを呼び出すときに、アーキテクチャを理解するための支援が必要です。シナリオは次のとおりです。
メソッドやクラスなどを含むXYZ.DLLというDLLがあります。これでXYZ.DLLの周りに.NETラッパーを作成でき、.NETアプリケーションから参照できるInterop.XYZ.DLLを取得できます。
最初の質問は次のとおりです。.NETアプリケーションでInterop.XYZ.DLLのクラスからオブジェクトを作成し、そのクラスのメソッドを呼び出すと、元のXYZ.DLLが呼び出されますか?私が理解している限り、Interop.XYZ.DLLは元のXYZ.DLLのプロキシクラスの形式として機能するため、呼び出しを行うにはXYZ.DLLが常にシステムに存在する必要がありますか?
2番目の質問:TLBIMP.EXEを使用してinterop.XYZ.DLLを作成したとします。.NETアプリケーションが実行されているシステムで、XYZ.DLLファイルにパッチが適用/更新されます。私の仮定では、新しくパッチが適用されたXYZ.DLLで同じクラス/メソッドが使用可能である限り、アプリケーションは引き続き機能します。それとも私は間違っていますか?参照される相互運用されたDLLのこのパッチに対処する必要がある場合のベストプラクティスはありますか?
ありがとう !
よろしくフランク
.net - DCOMサーバーとクライアントの両方が.NETで記述されています
.NET 4(VS2010、C#)でDCOMサーバーを開発しています。それ自体では、これは正常に機能しています。
ここで、このDCOMサーバー用の.NETクライアントも開発する必要がありますが、TypeLibへの参照を追加できません。Visual Studioは、タイプライブラリが.NETアセンブリからエクスポートされたものであり、参照として追加できないことを通知します。
この質問への回答は、ラッパーアセンブリを生成するために使用できるはずですがTlbImp.exe
、それも拒否することを示唆しています。
TlbImp:エラーTI1029:タイプライブラリ'MyWrapper'はCLRアセンブリからエクスポートされたため、CLRアセンブリとして再インポートできません。
純粋に.NETの観点からは、これにDCOMを使用することはあまり意味がないかもしれないことを理解しています。ただし、.NET以外のアプリケーションからも同じサーバーにアクセスできる必要があります。
tlbをIDLに変換し、そこからtlbを再生成しようとしましたが、これはVisualStudioをだますことはありません。
おそらく、再生成する前にIDLを少し変更することは可能ですか、それともサーバーとクライアントの両方が.NETで記述されていても、DCOMの使用を強制する方法はありますか?
.net - tlbimpを使用して、さまざまなファイルとアセンブリのバージョンを指定するにはどうすればよいですか?
tlbimpを使用して相互運用機能アセンブリを生成しています。相互運用機能アセンブリにファイルバージョンとアセンブリバージョンの両方をスタンプしたいと思います。ただし、tlbimpの/ asmversionオプションは、これらの両方を同じ値に設定しているようです。
tlbimpを使用して相互運用機能アセンブリにさまざまなファイルとアセンブリのバージョンを設定する方法を知っている人はいますか?
c# - .NET相互運用層とCOMの間で何が起こりますか?
C#.NETプロジェクトでCOMを使用しています。
ただし、私が呼び出すメソッドの1つは、期待どおりに機能していません。
そのため、.NETコード、Interopレイヤー、およびCOMの間で何が起こっているのかを知りたいと思います。
がCOMコンポーネントのメタデータラッパーを生成することを知っており、tlbimp.exe
これらの生成されたメソッドをオブジェクトブラウザーで確認できます。
これらのラッパーメソッドの1つが呼び出されたときに何が起こるかを確認/デバッグできますか?
以下のメソッドに配列を渡し、この配列が入力されることを期待していますが、配列は入力されません。次のtlbimp.exe
生成されたメソッドを呼び出していますが、予期しない結果が発生します。
メソッドIDL:
このメソッドを呼び出す.NETコード:
私が呼び出す他のCOMメソッドは正常に機能します。ただし、配列をパラメーターとして期待するメソッドを呼び出すと、期待どおりに機能しません。
COM相互運用マーシャラーには何か面白いことが起こっていると思います。そこで、メソッド
を呼び出した後、何が起こっているのかを確認できるかどうかを知りたいと思います。GetTags()
また、私はここで以下を読みました。
"if you are not satisified with the COM Interop marshaller, you can "override" just about every aspect of it through the very large and useful System::Runtime::InteropServices namespace"
どうすれば上記を達成できますか?
編集:動作するDelphiテストスクリプトを追加する
c# - アセンブリの代わりに COM Interop ライブラリの C# ソース コードを生成するにはどうすればよいですか?
COM ライブラリを (tlbimp を使用して直接、または Visual Studio の [参照の追加] ダイアログを使用して間接的に) インポートする場合、Interop.Word.dll などのバイナリ相互運用アセンブリの代わりに C# ソース コードを生成する方法はありますか?
UPD: リフレクターは悪い考えです。問題は、com インターフェイスが署名だけでなく、メンバーの順序であることです。リフレクターこの注文は違反です