2011-01-20 9 views
1

.NET DLLを呼び出すVB6にある既存のアプリケーションで作業しています。 私の.NETコードは、VB6アプリケーションから呼び出されたときに反映されません。 私は、.NETアプリで1公共properttを追加したが、私はそれにアクセスしようとすると、VB6は、例外が発生します:CreateObject vb6

「オブジェクトはこのプロパティまたはメソッドをサポートしていません」

を私のポストビルドイベントコード。

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe $(ProjectDir)bin\$(TargetName).dll /regfile:$(TargetName).reg 
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe $(ProjectDir)bin\$(TargetName).dll /tlb:$(TargetName).tlb 

CLSIDのレジストリが変更されています。 しかし、コードVB6 から呼び出すときに反映されていません(オブジェクトはこのプロパティまたはメソッドをサポートしていません)

VB6コード

Set frmApp = CreateObject("AssemblyName.Class1") 

私は、他の設定を行う必要がありますか?

VB6での参照を新しいclassidに設定するにはどうすればよいですか?

+1

を切り替えるあなたが「しかし、コードとはどういう意味ですかですVB6から呼び出すときは反映されませんか? "オブジェクトをインスタンス化するために使用しているコードを投稿します。 – mdm

+0

RegAsmコマンドに/ codebaseを追加しようとしましたか? –

答えて

3

ProgId attributeで.Netクラスにマークを付けることができます。これにより、コンパイルするたびにclsidが変更されなくなります。

clsidが変更されない場合は、クラスの登録を解除して再登録する必要はありません。

再登録後、VB6での参照を新しいclassidに設定する必要があります。 VB6はclsidを使用してコンポーネントを検索します。

コメント後
VB6は長い時間前です。私は "参照"が正しい用語であるかどうかわかりません。しかし、あなたは古い図書館のdepencyを削除するべきです。初めての場合と同じように、新しいものに依存関係を追加します。

+0

VB6で新しいclassidに参照を設定する方法は? – gauravghodnadikar

+0

@GvS @gauravghodnadikar "参照"は正しい用語です。 VB6 IDEでは、メニューコマンドProject-Referencesを使用して、 – MarkJ

+0

@ MarkJ、ありがとうございます。ちょうど私がそれと思ったようにVBA(Wordマクロ)のように。 – GvS

1

「反映されていません」は、非常にです。しかし、掲示されているように、これらのregasm.exeコマンドはではなく、VB6プログラムがアセンブリを見つけるのに十分なです。クラスオブジェクトの作成について不平を言っていない場合は、過去にgacutil.exeを使用していました。 GACには、DLLの古いコピーが含まれています。その古いコピーを削除する必要があります。gacutil.exe/uを使用してください。

regasm.exeコマンドラインを修正して、/ codebaseオプションを追加して、DLLを探す代わりにビルドディレクトリで常にDLLのコピーを使用するようにしますGACで完了

+0

私はまだ同じエラーが発生しています。 1)RegAsm.exe/regfileを使って.Netコードをビルドしています。2)RegAsm.exe/tlb(コードベーススイッチを使用していません)3)VBPと同じフォルダをコピーします。4)フォームは新しい変更に応じて変更されません。新しく作成された小道具にアクセスするとエラーが発生するオブジェクトはこのプロパティまたはメソッドをサポートしていません – gauravghodnadikar

+0

@gauravghodnadikar Hansの回答をよく読んでいますか? VB6は、VBPディレクトリまたは他の場所からDLLのローカルコピーを呼び出さないため、GACに登録する必要があります(後述の注を参照)。したがって、GACに古いコピーが必要です。 'gacutil.exe/u'を登録解除して、新しいディレクトリに '/ codebase'を登録する必要があります。 (注)マニフェストを使用して、ローカルディレクトリからDLLをロードするようにVB6を説得することはできますが、これは少し進歩しています。 – MarkJ

+0

完了...私はDLLをC:\ Program Files \ Microsoft Visual Studio \ VB98にコピーして、GACまたはCodebaseスイッチにデプロイする必要はありません – gauravghodnadikar

0

...私は単にCに私のDLLをコピー:\ Program Files \ MicrosoftビジュアルStudio \ VB98とGACに配備するという作業が不要または/ codebaseが

+0

Kindaはあなたのコンピュータを実行するすべてのマシンにVisual Studioをインストールする必要があります。コード。 –

+0

/codebaseはあなたの友人です。 –