DOBON.NET DOBON.NETプログラミング掲示板過去ログ

VB6で作成したDLLを.NETで使う

環境/言語:[Win2K, VB.NET, VB6]
分類:[.NET]

はじめまして。
いろいろと検索してみましたが解決方法が分からず投稿しました。
以前にVB6で作成されたDLLを.NETで使おうと
しているのですがエラーが発生し、煮詰まっております。
.NETのフォームオブジェクトをDLLに渡したいのですがうまくいきません。

簡単に説明します。
VB6のActive X DLLを作成し、Class1の中に以下のコードが含まれているとします。

Private mOrgForm As Object

Public Property Set OrgForm(frm As Object)
Set mOrgForm = frm
End Property

Public Property Get OrgForm() As Object
Set OrgForm = mOrgForm
End Property

このとき、Class1のInstancingはMultiUseとなっています。

.NETで参照設定を行い、以下のコードを記述しました

Dim fCls As Project1.Class1

fCls = New Project1.Class1()

Dim f2 As Form = New Form2()
fCls.OrgForm = CType(f2, Object)

fCls.OrgForm = CType(f2, Object)を実行しようとすると
追加情報:インターフェイスがサポートされていません。
というエラーが実行時に表示されます。

CTypeでObjectに変換している部分が問題かと思い
fCls.OrgForm = CType(f2, MarshalByRefObject)としてみましたが
同様のエラーが発生しました。

.NETのフォームオブジェクトをVB6のDLLに渡すことは無理なはなしなのでしょうか?
.NET側でこのエラーを回避する方法をご存知の方がいらっしゃいましたら
ご教授いただければと思います。
よろしくお願いします。
必要性がわかりませんが・・。
.NETで新たに書き直すのがよいのでは?
こんさん 返信ありがとうございます。

既存システムの.NETへのアップグレードという作業で
かつVB6で作成したDLLはそのまま使いたいとの要求があり
このような状況が発生しました。

やはりDLLもアップグレードすべきなのでしょうか?

なにせ、元のモノ(VB6)を作ったのが私じゃないもので
私もDLLにフォームオブジェクトを渡す必要性が
よく分からないんですよねぇ
蛇足ですが、下記URLにDll関数を呼び出す方法が載ってました。
ご参照になる事をお勧めします。

http://www.atmarkit.co.jp/fdotnet/dotnettips/024w32api/w32api.html
絶句。
解決というわけでもありませんが

fCls.OrgForm = CType(f2, Object) の部分を

fCls.OrgForm = f2.Handle とすることでエラーは解消されました

これでいいのかは分かりませんが
ひとまずこれで行こうかなと思っています。

こんさん、Rheaさん返信ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板