2016-04-06 17 views
0

.NET COM DLL(デバッグx64)を1台のマシンに構築しました。私はすべてのセットアップとそこで働いている(私はC:\ Windows \ Micorosft.NET \ assemblyとOLEVIEWERで見ることができる)。COM .NET DLLがGAC(REGDB_E_CLASSNOTREG)に登録されていません

私はdllを別のマシン(MIDLから生成された.hと.cファイルとともに)に持っていました。私は、これらの手順を実行することで、GACにdllを登録します。http://codeingaddiction.blogspot.com/2011/06/how-to-add-strong-name-to-existing-dll_16.html - キーペアを作成し、MISLを生成し、MISLからアセンブリを再構築してGACに追加します。それはGACにあるようだし、gacutil/l MyDllNameで検索することができます。しかし、私のクライアントアプリケーションでは、それに対してリンクするとき、実行時にCoCreateInstanceを呼び出すときに私はREGDB_E_CLASSNOTREG(HRESULT)を取得します。私はC:\ Windows \ Microsoft.NET/AssemblyやOLEVIEWではdllを見ることができません。

私は何か不足していますか、何か間違っていますか?あなたの.NETのCOMのDLLが登録されていないので、あなたがエラーREGDB_E_CLASSNOTREGを取得している

おかげ

+1

Regasm.exeを使用してアセンブリを登録することは一度も言及されていません。プロジェクトの "COM interopの登録"チェックボックスを使用すると、あなたのdevマシン上でスキップすることができます。もちろん、ユーザーのマシンではありません。 MIDLを使用することはかなり奇妙なbtwです、それはコーシャーを聞こえません。 –

+0

MIDLを使用しない場合(http://codeingaddiction.blogspot.com/2011/06/how-to-add-strong-name-to-existing-dll_16.htmlのチュートリアル)、「コーシャー」とは何ですか?それをやる方法? (btw私の腸の考えMIDLを使用して少しハッキーだった) – Prof

+0

あなたは通常、C++プログラムで#import指令を使用します。 –

答えて

2

理由があります。クライアントへのcomクラスとして公開されるためには、あらゆる.netアセンブリを登録する必要があります。 .netアセンブリを登録するには、regasm.exeを使用する必要があります。

+0

これは私にさらに分かりました。私はまだOLEVIEWのタイプライブラリの下でアセンブリを見ることができません(私はCOM dllをビルドしたマシン上にあります)。また、ターゲットマシン上のクライアントアプリケーションからインターフェイス上のメソッドを呼び出そうとすると、「...アドレスがなく、おそらくコンパイラの最適化が原因です」 – Prof

+1

アセンブリのタイプライブラリが登録されていないためです。 "regasm myTest.dll /tlb:myTest.tlb"のように/ tlbパラメータをregasm.exeに追加することで登録できます。前のコマンドはmyTest.dllを登録し、タイプライブラリmyTest.tlbも生成して登録します。 – vamsee

関連する問題