2017-01-24 14 views
-1

これは私の問題です。VB.NETからC++へのREGDB_E_CLASSNOTREG

Visual Studio 2015(MyLibrary)の下にVB.NETでクラスを作成しました。 の「アセンブリをCOMで表示可能にする」のようにDLLとしてコンパイルします。がチェックされているため、DLLファイルに加えて.tlbファイルが生成されます。

次に、COMクラスを使用してVisual Studio 2013の下でC++コードでこのクラスをインスタンス化しようとします。その後、私は

#import "MyLibrary.tlb" raw_interfaces_only 

::私は、Visual Studioの両方のバージョンがインストールされているコンピュータから、それを行うと、それがうまく

// Initialize COM. 
HRESULT hr = CoInitialize(NULL); 

// Create the interface pointer. 
cMyLibraryPtr l_pclMyLibrary(__uuidof(MyLibrary)); 

// Use it 
l_pclMyLibrary->DoThings(); 

作品 はそのために、私はによって生成された.tlhファイルを作りますデバッグモードまたはリリースモードのいずれかです。 私のソフトウェアをインストールした別のコンピュータから起動すると、私のクラスのコンストラクタが "CreateInstance"を呼び出すと、REGDB_E_CLASSNOTREGが得られます。

私がチェックしたり、それを動作させるためにそれらのものを試してみた:

  1. 何もかものx86(VB.NETとC++)でコンパイルし、私は2つの32ビットによさが
  2. を目標と私は登録してみました私のライブラリ "regasm.exe MyLibrary.dll"を呼び出すことによって。私は登録がうまくいったことをregeditで調べた。

私は何ができるのかわかりません...だから、どんな助けも歓迎されるでしょう!

ありがとう アレックス。

+0

指定したすべてのオプションを含め、使用した** exact ** regasmコマンドを表示します。 – TnTinMn

答えて

1

私が使用してより良い運を持っていた:私はまた、あなたが昇格したコマンドラインから実行を確認するだろう...

regasm /tlb /codebase MyLibrary.dll 

注意/ TLBと/コードベースパラメータを

を管理者権限を持つ

はまた、あなたが使用しているRegasm.exeによってのバージョンがあること、

1)あなたがあなたのケースでは、あなたのDLL 2)を構築.NETの同じバージョンであることを確認する必要がありregasm.exeの32ビット版で、64ビット版ではありません

他のものは、同じインストールディレクトリにこれらを配布する場合は、登録されたCOMが登録されていなくても登録できます必要。

関連する問題