2012-03-30 1 views
0

VB 6.0で動的にOCXをロードしています。VB 6.0で動的にOCXをロードする

次は私がメソッドをロードし、呼び出すために使用していたコードです:

Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long 
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long 
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long 
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Any, ByVal wParam As Any, ByVal lParam As Any) As Long 

Private Sub Foo 
    On Error Resume Next 

    Dim lb As Long, pa As Long 
    Dim versionString As String 
    Dim retValue as Long 

    lb = LoadLibrary("D:\projects\other\VB_DLLs\TestDLL\TestDLL.dll") 

    'retrieve the address of getVersion' 
    pa = GetProcAddress(lb, "getVersion") 

    'Call the getVersion function' 
    retValue = CallWindowProc (pa, Me.hWnd, "I want my version", ByVal 0&, ByVal 0&) 

    'release the library' 
    FreeLibrary lb 
End Sub 

は、今私は、OCXのパブリックプロパティにアクセスしたいです。 OCXのプロパティにどのようにアクセス(取得/設定)できますか?

+0

あなたの目標は何ですか? OCXは、通常、フォーム上に目に見えるコントロールとして表示されるコントロールです。あなたのコードは、ビジュアルプレゼンテーションを使わずにDLLをロードしていることを示しています。 – GTG

+0

@GTG、私は実際にOCXのメソッドを呼び出すプロパティを設定した後に、OCXのプロパティを設定する必要があります。計算のためだけに、フォーム上に視覚的なプレゼンテーションがありません。 – Siddiqui

+2

通常の遅延バインディングを試したことがありますか?Dim myObjectをオブジェクトセットとして設定しましたmyObject = createobject( "yourlib.yourclass")versionString = myObject.TheVersionProperty – GTG

答えて

3

このようにOCX/COMコントロールを使用することはできません。

オブジェクトのインスタンスを作成して使用するには、オブジェクトのインスタンスを作成し、それを使用する必要があります。

Set TestObject = CreateObject("TestDll.TestObject") 
Value = TestObject.Method(InputValue) 

これはDLLを登録する必要があり、特定のインスタンスではなく登録されているものを使用します。

登録したくない場合は、DirectCOMをご覧ください。

+0

に行く方法ですControls.AddとcreateObjectの間のdiffrenceは何ですか?あなたのアプローチの代わりにControls.Addを使用できますか? – Siddiqui

+0

'Controls.Add()'はフォームに(コントロールとユーザーが対話するための)コントロールを追加します。 'CreateObject()'はプログラムで使用するためにメモリにオブジェクトを作成するだけです。私はそのように 'Controls.Add()'を使っていません。 – Deanna

+0

実際、私はdllのメソッドを呼び出すコードを試してきましたが、Controls.Add()を使ってフォーム上に可視オブジェクトを表示させるにはどうすればいいですか?私はコントロールを可視にしますが、これでDLLのメソッドを呼び出すことはできません。 – Siddiqui

関連する問題