2012-03-30 55 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 2012-03-30 07:47:37

+0

@GTG,我想確定OCX的屬性後,我想設置OCX的屬性。沒有形式的視覺呈現,只是爲了計算。 – Siddiqui 2012-03-30 07:55:30

+2

您是否嘗試了正常的後期綁定,如下所示:Dim myObject as object set myObject = createobject(「yourlib.yourclass」)versionString = myObject.TheVersionProperty – GTG 2012-03-30 08:05:10

回答

3

您不能以這種方式使用OCX/COM控件。

要創建和使用對象的實例,您將需要..創建對象的實例,然後使用該實例。

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

這需要DLL被註冊,並且將使用註冊的而不是特定的實例。

如果你不希望它被註冊,請看DirectCOM。

+0

Controls.Add和createObject之間有什麼不同?我可以使用Controls.Add而不是你的方法嗎? – Siddiqui 2012-04-02 07:31:48

+0

'Controls.Add()'將控件添加到窗體中(以便可見並且供用戶進行交互)。 'CreateObject()'只是在內存中創建對象以便以編程方式使用。我沒有以這種方式使用Controls.Add()。 – Deanna 2012-04-02 08:06:39

+0

其實我已經嘗試過你的代碼完全調用DLL的方法,但我怎樣才能讓可見對象在窗體上可見,使用Controls.Add()我使控制可見,但與此我不能調用DLL的方法。 – Siddiqui 2012-04-02 09:02:05