1

VB 6 から C# COM オブジェクトを呼び出そうとしていますが、DLL へのエントリポイントを見つけるのが難しいというエラー 453 が表示されます。C# のすべてのモジュールを公開し、COM の可視性を TRUE にして、.dll ファイルを登録し、タイプ ライブラリ ファイルを利用できるようにし、P/Invoke 呼び出しも呼び出します。それでもエラーが発生します。以下にコードを貼り付けます

VB6:

Private Declare Function DisplayCForm Lib "C:\Users\LP027077\Documents\Visual Studio 2010\Projects\COMWorld\COMWorld\bin\Debug\COMWorld.dll" ()
Private Sub Command1_Click()
DisplayCForm
End Sub

C#:

 namespace COMWorld
{

    [Guid("23047247-38D3-464F-A845-0D42A7ACD622")]
    [ComVisible(true)]
    public class COMObject
    {
        [DllImport("Kernel32.dll", EntryPoint = "GetConsoleWindow",SetLastError = true)]
        internal static extern IntPtr GetConsoleWindow();
        public void COMModule()
        {
            Form f1 = new Form();
            f1.Text = "Hello VB6 from c# .NET";
        }
    }
}

この点で私を助けてください!! 前もって感謝します

4

2 に答える 2

6

VB 6 コードから .Net COM オブジェクトのメソッドを呼び出す必要がある場合、通常は次のようにします。

  1. COMVisible 属性を .Net クラスとアセンブリに追加します。
  2. .Net アセンブリをビルドして登録します。
  3. Project | Visual Studio を使用して、VB プロジェクトに .Net アセンブリへの参照を追加します。参考メニュー。
  4. VB コードで「New」キーワードを使用して、progid を使用して .Net クラスのインスタンスを作成し、それを使用して必要なメソッドを呼び出します。

.Net アセンブリの progid の既定値は、アセンブリ名とピリオドで区切られたクラスの名前です。VB でアセンブリへの参照を追加すると、Intellisense と VB IDE のオブジェクト ブラウザーの両方に表示されます。

「COMWorld」というアセンブリ名、「COMObject」というクラス、および「COMModule」というメソッドで例を使用するには、私の VB コードは次のようになります。

Private Sub Command1_Click()

    Dim class1 As New COMWorld.COMObject
    class1.COMModule

End Sub

免責事項: 残念ながら私の MacBook Air には VB 6 IDE が搭載されていないため、コードは 100% コンパイラー証明されていない可能性があります!

お役に立てれば!

于 2012-12-21T21:12:24.473 に答える
0

「関数の宣言」は、COM ではなく「クラシック DLL」に使用されます。COM では、参照を設定し、通常の "Dim myObject as theCOMClass" 構文でオブジェクトを宣言するだけです。

dll は COM dll であり、iUnknown インターフェイスではなくヘッダー ファイルを使用してアクセスしようとしているため、dll のエントリ ポイントを「見つけるのは困難」です。

于 2012-12-23T04:57:58.757 に答える