2012-03-30 6 views
0

Ich lade OCX dynamisch in VB 6.0. OCX dynamisch in VB 6.0 laden

Im folgenden ist der Code, den ich verwende die Methoden zu laden und rufen:

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 

Jetzt habe ich öffentliche Eigenschaften von OCX zugreifen möchten. Wie kann ich auf die Eigenschaften von OCX zugreifen (setzen)?

+0

Was ist Ihr Ziel hier? Ein OCX ist normalerweise ein Steuerelement, das als sichtbares Steuerelement in einem Formular angezeigt wird. Ihr Code zeigt an, dass Sie eine DLL ohne visuelle Präsentation laden und diese in einem spät gebundenen Stil aufrufen möchten. – GTG

+0

@GTG, ich möchte eigentlich die Eigenschaften von OCX setzen, nach settint die Eigenschaften möchte ich die Methode von OCX aufrufen. Keine visuelle Präsentation auf dem Formular, nur zur Berechnung. – Siddiqui

+2

Haben Sie versucht, normale späte Bindung, wie folgt: Dim myObject als Objektmenge myObject = createobject ("yourlib.yourclass") versionString = myObject.TheVersionProperty – GTG

Antwort

3

Sie können ein OCX/COM-Steuerelement nicht auf diese Weise verwenden.

Um eine Instanz des Objekts zu erstellen und zu verwenden, müssen Sie eine Instanz des Objekts erstellen und diese dann verwenden.

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

Dies erfordert, dass die DLL registriert wird und verwendet wird, was auch immer registriert ist und nicht eine bestimmte Instanz.

Wenn Sie nicht möchten, dass es registriert wird, schauen Sie sich DirectCOM an.

+0

Was ist der Unterschied zwischen Controls.Add und createObject? Kann ich Controls.Add anstelle Ihres Ansatzes verwenden? – Siddiqui

+0

'Controls.Add()' fügt dem Formular ein Steuerelement hinzu (um sichtbar zu sein und mit dem der Benutzer interagieren kann). 'CreateObject()' erstellt das Objekt im Speicher, um es programmatisch zu verwenden. Ich habe 'Controls.Add()' auf diese Weise nicht benutzt. – Deanna

+0

Eigentlich habe ich versucht, Ihren Code ruft die Methoden der dll perfekt, aber wie kann ich sichtbares Objekt auf dem Formular sichtbar machen, mit Controls.Add() Ich mache die Kontrolle sichtbar, aber damit kann ich nicht Methode der DLL aufrufen. – Siddiqui