VB6で書かれたむしろ大きなプロジェクトをC#に変換しようとしています。移転されるプロジェクトの規模を考えると、18ヶ月間にわたって段階的に実施されています。私は.NetプロジェクトにVB6 ActiveX dllのリファレンスを追加することに問題があります。Visual StudioでVB6リファレンスを追加すると、タイプライブラリのインポーターでタイプ検証中にエラーが発生しました。
これらの手順を正確に実行すると、問題を再現できるはずです。私はCOM表示されている.NETのインターフェース書かれている
:プロジェクトのプロパティの[コンパイル]タブで、「COM相互運用のための登録」を選択することで
<ComVisible(True)>
Public Interface ITestInterface
Property A As String
Function TestMethod() As String
End Interface
を、あなたはTLBファイルを取得します。
私は、このTLBを参照するVB6プロジェクトと、公開されたインターフェイスを実装するクラスを作成しました。
Implements ITestInterface
Private mA As String
Public Property Get ITestInterface_A() As String
ITestInterface_A = mA
End Property
Public Property Let ITestInterface_A(ByVal value As String)
mA = value
End Property
Public Function ITestInterface_TestMethod() As String
ITestInterface_TestMethod = "From VB6"
End Function
私は、コンパイル時にTLBが自動的に作成され、その後、「リモートサーバーファイル」を使用してVB6でプロジェクトのプロパティの[コンポーネント]タブを設定した場合。私はOLEVIEWにそのTLBを表示して(.NETプロジェクトで定義されたインターフェイスのVB6で行われ、具体的な実装の詳細に加えて)以下を見ることができます:私は完全に新しいを作成し、今
// typelib filename: TestVB6Interface.dll
[
uuid(**EF005573-BFC7-436D-A382-F906CA09F94A**),
version(3.0)
]
// ... some other stuff
// TLib : // TLib : : {79EC733A-0267-4506-8D38-C4D4655E0755}
importlib("SimpleDotNetLibrary.tlb");
。ネットプロジェクト。私はVB6のDLLへの参照を追加する場合、私は次のエラーを取得する:
は "ef005573-bfc7-436d-a382-f906ca09f94a" バージョン3.0をCOM参照を解決できませんでした。タイプライブラリインポータで型の検証中にエラーが発生しました。クラスメンバーなしでインポートしてみてください。私は、Visual Studioコマンドプロンプトを起動して実行する場合
ただし、以下:
tlbimp TestVB6Interface.tlb /out:TestVB6Interface.MyInterop.dll
は、その後、私は私の.NETソリューションの基準とそのDLLを追加することができますし、それは完全に正常に動作します。
私の質問です。 tlbimpはコマンドラインで何をしているのですが、参照を直接追加するだけでは完了しません。 Visual Studioのメッセージに「クラスメンバーを使用しないでインポートしようとしています」と表示されたら、Visual Studio内でどのように正確に行うのですか?私はtlbimpでそれを行う方法を知っています。
私はテキストの壁について謝罪しますが、私が感じた情報を保つことができる限り最良の状況を説明したいと思います。
あなたはこれを理解しましたか? – JMK
私たちはしました(ちょっと)。 .Netインターフェイスを実装するVB6クラスは "Attribute VB_Exposed = False"に設定する必要があります。これは、TLBにないかVB6 DLLの外部に公開されていることを意味しますが、.Netインターフェイス(とにかくそれは本当に必要なものです)。これは症状を修正しました(エラーは消えてしまいますが)、この解決策は誰にとってもうまくいかない可能性があるので、間違いなく私の疑問に対処した根本的な問題は解決していません。 –
十分な公正、純粋な好奇心から尋ねる、返信のおかげで! – JMK