2012-03-30 105 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