私はこの問題を約6年前に修正したことを知っています...しかし、そのトリックは何かを覚えていません。VB6 .NET Interopオブジェクトが必要です
私は.NETクラスを持っています。これはCOMで表示されます(ただしCOMには登録されていません)。 COM登録されたクラスへの呼び出しの結果として返されます。だから私のVB6のコードが
Dim instance as Variant
' call .NET exposed tlb to set instance with a COM visible class
Dim wrapper as New ComWrapper ' this is a .NET class COM exposed and registered
Set instance = wrapper.MyClassInstance ' MyClassInstance is an instance of COM visible, but not COM registered MyClass defined below
instance.DoIt 1
関連するクラスで終わるMyClassの
public class MyClass
{
public void DoIt(int id) { ... }
}
コールinstance.DoIt 1は例外で、 "必要なオブジェクト" を投げています。私が正しく覚えていれば、VB6が自動的にあなたのために行うことはできませんが、整数1はボックス化またはボックス化されていなくてはならないという事実と関係しています...しかし、それを修正する方法はかなりわかりません。 .. DoItメソッドに引数がない場合は、問題なく動作します...
誰でもこの問題を解決する方法は分かりますか?
ありがとうございました。
MyClassのは、別のDLLであると私は通信のために複数のタイプライブラリを登録する必要はありません。 1つのタイプライブラリを登録するのが面倒です。 – Jeff
タイプライブラリを登録しません*しません。 VB6でProject + Referencesを使って、.tlbを追加して参照してください。 –
私が知っている限り、dllはregasm経由でtlbとして登録されるという要件を追加しています。この2番目のアセンブリは、.NET COM Visible、非regasmのクラスライブラリです。 – Jeff