Hier ein Beispiel wie man vorgehen könnte:
Hab für dieses Bsp. eine ActiveX dll erstellt, welche auf den Namen "MyProject" hört und dieser ein Klasse Names "Class1" "spendiert". Die Klasse beinhaltet eine "HelloWorld" Methode. So, um diese zu starten ist erst einmal nötig, diese im System zu registrieren (COM-Server). Das ist mit folgenden Code möglich (Reg-Code aus der vb@rchiv Tipps & Tricks Ecke):
Private Declare Function LoadLibrary Lib "kernel32" Alias _
"LoadLibraryA" (ByVal lpLibFileName As String) As Integer
Private Declare Function FreeLibrary Lib "kernel32" _
(ByVal hLibModule As Integer) As Integer
Private Declare Function GetProcAddress Lib "kernel32" _
(ByVal hModule As Integer, ByVal lpProcName As String) As Integer
Private Declare Function CreateThread Lib "kernel32" _
(ByVal lpThreadAttributes As Object, ByVal dwStackSize As Integer, _
ByVal lpStartAddress As Integer, ByVal lParameter As Integer, _
ByVal dwCreationFlags As Integer, ByVal lpThreadID As Integer) As Integer
Private Declare Sub ExitThread Lib "kernel32" _
(ByVal dwExitCode As Integer)
Private Declare Function WaitForSingleObject Lib "kernel32" _
(ByVal hHandle As Integer, ByVal dwMilliseconds As Integer) As Integer
Private Declare Function GetExitCodeThread Lib "kernel32" _
(ByVal hThread As Integer, ByVal lpExitCode As Integer) As Integer
Private Declare Function CloseHandle Lib "kernel32" _
(ByVal hObject As Integer) As Integer
Public Function RegisterFile(ByVal sFile As String, ByVal Register As _
Boolean) As Boolean
Dim Result As Boolean
Dim Lib_ As Integer
Dim sProc As String
Dim r1 As Integer
Dim r2 As Integer
Dim Thread As Integer
Try
Result = False
Lib_ = LoadLibrary(sFile)
If Lib_ Then
sProc = IIf(Register, "DllRegisterServer", _
"DllUnregisterServer")
r1 = GetProcAddress(Lib_, sProc)
If r1 Then
Thread = CreateThread(0, 0, r1, 0, 0, r2)
If Thread Then
r2 = WaitForSingleObject(Thread, 10000)
If r2 Then
FreeLibrary(Lib_)
r2 = GetExitCodeThread(Thread, r2)
ExitThread(r2)
Exit Function
End If
CloseHandle(Thread)
Result = True
End If
End If
FreeLibrary(Lib_)
End If
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
Dim s As String = ".../MyProject.dll"
Me.RegisterFile(s, True)
End Sub Nachdem diese erfolgreich reg. wurde, ist es zur Laufzeit möglich, die Methode mit folgendem Code aufzurufen:
Dim o As Object = CreateObject("MyProject.Class1")
o.HelloWorld()Viel Erfolg!
Steve |