vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: DLL registrieren lassen 
Autor: GhostRE
Datum: 30.06.08 09:13

Ist zwar VB6 Code, dürfte aber auch unter .NET gehen.

' Die notwendigen API-Deklarationen:
Private Const WAIT_ABANDONED As Long = &H80&
Private Const WAIT_FAILED    As Long = &HFFFFFFFF
Private Const WAIT_OBJECT_0  As Long = &H0&
Private Const WAIT_TIMEOUT   As Long = &H102&
Private Const INFINITE       As Long = &HFFFF&
 
Private Declare Function LoadLibrary Lib "Kernel32" Alias "LoadLibraryA" (ByVal _
  FileName As String) As Long
Private Declare Function FreeLibrary Lib "Kernel32" (ByVal hModule As Long) As _
Long
Private Declare Function GetProcAddress Lib "Kernel32" (ByVal hModule As Long, _
ByVal ProcedureName As String) As Long
Private Declare Function CreateThread Lib "Kernel32" ( _
                                                      ByRef ThreadAttributes As _
                                                      Any, _
                                                      ByVal StackSize As Long, _
                                                      ByVal StartAddress As _
                                                      Long, _
                                                      ByVal Parameter As Long, _
                                                      ByVal CreationFlags As _
                                                      Long, _
                                                      ByRef ThreadID As Long _
                                                      ) As Long
Private Declare Function GetExitCodeThread Lib "Kernel32" (ByVal hThread As _
  Long, ByRef ExitCode As Long) As Long
Private Declare Function WaitForSingleObject Lib "Kernel32" (ByVal hObject As _
Long, ByVal TimeOut As Long) As Long
Private Declare Function CloseHandle Lib "Kernel32" (ByVal hObject As Long) As _
Long
 
Public Function RegisterServer(ByVal PathToFile As String, _
                               Optional ByVal Register As Boolean = True, _
                               Optional ByVal TimeOut As Long = 5000 _
                               ) As Boolean
' Registriert oder deregistriert eine ActiveX-DLL oder ein OCX
' -----------------------------------------------------------------------------
' ---
' Parameterinformation:
' -----------------------------------------------------------------------------
' ---
'
' - PathToFile:   Vollständiger Pfad zur Datei, die den COM-Server enthält.
'
' - Register:     TRUE, um den COM-Server zu registrieren.
'   (optional)    FALSE, um den COM-Server zu deregistrieren.
'                 Standardwert: TRUE (Registrierung des COM-Servers)
'
' - TimeOut:      Zeit in Millisekunden, die maximal auf den Vorgang
'   (optional)    verwendet werden soll. Im Regelfall gibt die Funktion
'                 sofort nach erledigter Registrierung/Deregistrierung
'                 oder nach erkannter Unmöglichkeit der Aktion die Ablauf-
'                 kontrolle an den Aufrufer zurück.
'                 Standardwert: 5000 (maximal 5 Sekunden)
'
' Rückgabewert:   TRUE bei erfolgreicher Aktion, FALSE bei erfolgloser Aktion.
'
' -----------------------------------------------------------------------------
' ---
Dim hModule As Long      ' Handle auf ein geladenes Modul
Dim lProcAddress As Long ' Adresse einer Funktion in einem geladenen Modul
Dim hThread As Long      ' Handle auf einen Thread
Dim loclngThread As Long    ' ID eines Threads
Dim lResult As Long      ' Rückgabewert für WaitForSingleObject
Dim lExitCode As Long    ' Exit-Code des erzeugten Threads
 
  ' Versuchen, die angegebene Datei als Modul zu laden
  hModule = LoadLibrary(PathToFile)
 
  ' Wenn kein Modul-Handle vorliegt, war LoadLibrary erfolglos:
  If hModule = 0 Then
    Exit Function
  End If
 
  ' Versuchen, die Adresse der Funktion DllRegisterServer (bzw.
  ' DllUnregisterServer) zu ermitteln:
  lProcAddress = GetProcAddress(hModule, IIf(Register, "DllRegisterServer", _
    "DllUnregisterServer"))
 
  ' Sofern Funktionsadresse = 0, war GetProcAddress erfolglos:
  If lProcAddress = 0 Then
    FreeLibrary hModule ' Bereits geladenes Modul freigeben
    Exit Function
  End If
 
  ' Versuchen, die Funktion aufzurufen:
  hThread = CreateThread(ByVal 0&, 0, lProcAddress, 0, 0, loclngThread)
 
  ' Liegt kein Thread-Handle vor, war CreateThread erfolglos:
  If hThread = 0 Then
    FreeLibrary hModule ' Bereits geladenes Modul freigeben
    Exit Function
  End If
 
  ' Auf Abarbeitung der Ausführung (oder auf TimeOut) warten:
  lResult = WaitForSingleObject(hThread, TimeOut)
 
  ' Liefert WaitForSingleObject WAIT_OBJECT_0 zurück, war
  ' die Abarbeitung vor Erreichen des TimeOuts erfolgreich:
  If lResult = WAIT_OBJECT_0 Then
    ' ExitCode des Threads ermitteln - bei Rückgabe von 0
    ' hat die aufgerufene Funktion die Aktion erfolgreich
    ' durchgeführt:
    GetExitCodeThread hThread, lExitCode
    If lExitCode = 0 Then
      RegisterServer = True
    End If
  End If
  CloseHandle hThread ' Handle auf den erzeugten Thread freigeben
  FreeLibrary hModule ' Geladenes Modul freigeben
End Function
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
DLL registrieren lassen1.164snake.logan29.06.08 15:03
Re: DLL registrieren lassen801Snoopy29.06.08 15:06
Re: DLL registrieren lassen711snake.logan29.06.08 15:09
Re: DLL registrieren lassen720snake.logan29.06.08 19:12
Re: DLL registrieren lassen731Melkor29.06.08 19:16
Re: DLL registrieren lassen724snake.logan29.06.08 19:45
Re: DLL registrieren lassen731Melkor29.06.08 19:59
Re: DLL registrieren lassen715snake.logan29.06.08 20:27
Re: DLL registrieren lassen808GhostRE30.06.08 09:13
Re: DLL registrieren lassen676Melkor30.06.08 15:08
Re: DLL registrieren lassen698GhostRE01.07.08 07:59
Re: DLL registrieren lassen994Melkor01.07.08 09:12
Re: DLL registrieren lassen656GhostRE01.07.08 09:21

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel