Dotnet interopとC#で登録不要のCOMを使用することはできますか?もしそうなら、C#プロジェクトのCOMオブジェクトへの参照をどのように追加しますか?C#との無料のCOM interop登録が可能ですか?
私は、埋め込みマニフェストと2つのテストクライアントを持つ、無料のATL COMサーバーdllを持っています.1つのcppともう1つのc#です。 CPPクライアントが正しくimport文を使用してCOMオブジェクトを参照して
#pragma comment(linker, "\"/manifestdependency:type='win32' name='TestComSvr2' version='1.0.0.0'\"")
またはリンカの下にある「追加のマニフェストの依存関係」「タイプ= 『win32の』名前= 『TestComSvr1』バージョン= 『1.0.0.0』」への設定のいずれか - >マニフェストファイルオプション。その後、COMコンポーネントが同じディレクトリにある限り、cppクライアントは正しく実行されます。
C#クライアントは、まったく再生を拒否します。
未登録のCOMコンポーネントDLLまたはエラーに未登録のTLB結果のいずれかにファイル参照を追加しよう:
"A reference to 'blah blah' could not be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component".
「はregtlibのTestComSvr」とだけタイプライブラリを登録して、ファイルまたはCOMのいずれかを作成します次に、C#プロジェクトを構築する登録解除、単離さへの参照を設定し、
"Error loading type library/Dll. (Exception from HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY))".
COMコンポーネントを登録し、C#プロジェクトで通常の参照を作成する:それへの参照をして構築に失敗C#プロジェクトをもたらしますコンポーネントと、この例外ではC#プロジェクトの成果を実行している:
Retrieving the COM class factory for component with CLSID {B1D0A80F-0050-4856-BACD-87D664E58CBE} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
注:最終的にそれはまだコンポーネントの登録を必要とするので、これは働いていたとしても、それは、とにかく便利なケースではない、私はちょうどそれをテストしました徹底。
これまでのところ、COMオブジェクトをC#から参照できる唯一の方法は、COMオブジェクト自体を登録することですが、それ以来、ポイントは完全に無制限ではありません。
誰でもアイデアがありますか?
(これはVS2010 sp1のWinXP上にあります)。
Visual Studio専用のマニフェストファイルを作成する必要があるのではないかと思いますか?このリンクが見つかりましたが、それが役に立つかどうかは不明です。http://msdn.microsoft.com/en-us/library/ms973913.aspx – PeskyGnat
さらに、tlbimpでinterop dllを作成して参照するとどうなりますか?すなわち 'tlbimp'? –
PeskyGnat