0

VB6 で COM オブジェクトを使用しています。COM オブジェクトには関数 Foo(Long, Long, Rect) があります。Rect は、COM オブジェクトの実装で定義された構造体です。私のVB6コード(フォーム上のボタン)は以下のようなものです:

Private Sub btnTestCom_Click()
    Set ComObj = CreateObject("ObjectName")
    Dim rect As DISPLAY_RECT

    rect.Left = 20
    rect.Top = 20

    ComObj.Foo(101, 0, rect) ' Error here
End Sub

最後の行で、このコンパイル エラーが表示されます。

ユーザー定義の型パラメーターを持たない他の COM 関数は正常に動作しています。

この問題を解決するにはどうすればよいですか?

ありがとう。

4

2 に答える 2

1

変数が型指定されていないため、関数呼び出しは遅延バインドさComObjれています。次のように宣言してみることができます

Dim ComObj As SomeObjectDefinedInComImplementation 

編集

DISPLAY_RECTまた、COM ライブラリの を実際に使用していることも確認します。オブジェクト ブラウザを開き (F2 キーを押す)、すべてのライブラリで を検索しますDISPLAY_RECT

  • 結果が 1 つしか表示されない場合は、それが正しい COM ライブラリからのものかどうかを確認してください。
    • 正しい COM ライブラリからのものである場合は、別の問題があるはずです。
    • 間違った COM ライブラリからのものである場合: (プロジェクト参照で) 正しいライブラリが実際に参照されているかどうかを確認してください。すでに参照されていることが確実な場合は、本当に渡す必要があるかどうかを再確認してくださいDISPLAY_RECT
  • 複数の結果が表示される場合、VB6 が間違ったライブラリを選択している可能性があります。DISPLAY_RECTライブラリの名前で明示的に修飾してみてくださいDim rect As TheCorrectLibraryName.DISPLAY_RECT
于 2011-08-15T08:14:32.933 に答える
0

DISPLY_RECTが型であると仮定すると、型をパブリックCOMメソッドに渡したり、VB6のパブリックCOM関数から型を返したりすることはできません。タイプを複製するクラスと、クラスをパラメーターとして受け取り、タイプを返すヘルパー関数を作成する必要があります。

于 2011-08-15T13:10:56.697 に答える