vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

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

Visual-Basic Einsteiger
Re: Win32-Dll mit VB6 erstellen 
Autor: Blackbox
Datum: 26.11.12 20:40

Hi,
ich verstehe den Hickhack den Du da machst eigentlich nicht. Eigentlich wollen doch alle ooP programmieren und setzen nur dann native Dll's ein, wenn es nicht anders geht, bzw. die native
Dll noch nicht in ooP übersetzt wurde (.NET).
Aus Erfahrungen mit administrativen Einschränkungen weiß ich, das sich eine Dll durchaus
selbst registrieren kann.

Jede COM-Komponente, eine VB.dll also auch, hat als exportierte Funktion: DllRegisterServer. Hier ein
VBA Proggie, das genau so eine nicht registrierte Komponente einbindet:

Hier Aufruf von DllRegisterServer einer nicht registrierten COM-Komponente:

Private Type OPENFILENAME
  lStructSize As Long
  hwndOwner As Long
  hInstance As Long
  lpstrFilter As String
  lpstrCustomFilter As String
  nMaxCustFilter As Long
  nFilterIndex As Long
  lpstrFile As String
  nMaxFile As Long
  lpstrFileTitle As String
  nMaxFileTitle As Long
  lpstrInitialDir As String
  lpstrTitle As String
  flags As Long
  nFileOffset As Integer
  nFileExtension As Integer
  lpstrDefExt As String
  lCustData As Long
  lpfnHook As Long
  lpTemplateName As String
End Type
 
Private Const OFN_HIDEREADONLY = &H4
Private Const OFN_NOCHANGEDIR = &H8
Private Const OFN_NONETWORKBUTTON = &H20000
Private Const OFN_NOLONGNAMES = &H40000
Private Const OFN_EXPLORER = &H80000
 
Private Declare Function GetOpenFileName Lib "comdlg32.dll" _
  Alias "GetOpenFileNameA" ( _
  pOpenfilename As OPENFILENAME) As Long
 
Private Declare Function LoadLibrary Lib "kernel32.dll" Alias "LoadLibraryA" ( _
     ByVal lpLibFileName As String) As Long
 
Private Declare Function FreeLibrary Lib "kernel32.dll" ( _
     ByVal hLibModule As Long) As Long
 
Private Declare Function GetProcAddress Lib "kernel32.dll" ( _
     ByVal hModule As Long, _
     ByVal lpProcName As String) As Long
 
Private Declare Function CallProc Lib "user32.dll" Alias "CallWindowProcA" ( _
     ByVal lpPrevWndFunc As Long, _
     ByVal hwnd As Long, _
     ByVal msg As Long, _
     ByVal wParam As Long, _
     ByVal lParam As Long) As Long
 
 
Private Function ShowOpenDlg(ByVal strFilter As String, _
  strTitel As String, strInitDir As String) As String
 
  Dim lngOpenFileName As OPENFILENAME
  Dim lngAnt As Long
 
  With lngOpenFileName
    .lStructSize = Len(lngOpenFileName)
    .hwndOwner = 0
    .hInstance = 0
    If Right$(strFilter, 1) <> "|" Then _
      strFilter = strFilter + "|"
 
    For lngAnt = 1 To Len(strFilter)
      If Mid$(strFilter, lngAnt, 1) = "|" Then _
       Mid$(strFilter, lngAnt, 1) = Chr$(0)
    Next
 
    .lpstrFilter = strFilter
    .lpstrFile = Space$(254)
    .nMaxFile = 255
    .lpstrFileTitle = Space$(254)
    .nMaxFileTitle = 255
    .lpstrInitialDir = strInitDir
    .lpstrTitle = strTitel
    .flags = OFN_HIDEREADONLY Or OFN_EXPLORER Or OFN_NOCHANGEDIR
 
    lngAnt = GetOpenFileName(lngOpenFileName)
    If (lngAnt) Then
      ShowOpenDlg = Trim$(.lpstrFile)
    Else
      ShowOpenDlg = ""
    End If
  End With
End Function
 
Private Sub Workbook_Open()
   Dim hModule As Long
   Dim pAdr As Long
   Dim sFile As String
 
   Application.Visible = False
 
   sFile = ShowOpenDlg("*.DLL", "Komponente (*.dll , *.ocx) suchen", "C:\")
   If sFile = "" Then Exit Sub
 
   hModule = LoadLibrary(sFile)
   If hModule = 0 Then
       MsgBox "Es handelt sich um keine gültige DLL.", vbExclamation, "Fehler" & _
         "aufgetreten ..."
       Application.Visible = True
       Exit Sub
   End If
 
   pAdr = GetProcAddress(hModule, "DllRegisterServer")
   If pAdr > 0 Then
       CallProc pAdr, 0, 0, 0, ByVal 0
   ElseIf pAdr = 0 Then
       MsgBox "Es handelt sich um keinen COM-Server", vbExclamation, "Fehler" & _
         "aufgetreten ...."
   End If
 
   FreeLibrary hModule
   MsgBox "Die Komponente wurde erfolgreich registriert", vbInformation, "Kein" & _
     "Fehler aufgetreten."
   Application.Visible = True
End Sub
Eine weitere Forderung ist: Ein Objekt kann sich stets selbst aus seiner Schachtel heraus begeben und sich darstellen. Das heißt, das jedes COM-Modul über eine exportierte Funktion: DllGetClassObject verfügt und dieses via IClassFactory Dir ein Objekt aus deiner ActiveX.DLL herauszaubert - ohne registriert zu sein.

Das zweite ist über VB etwas schwierig zu realisieren - dafür habe ich aber etwas in der Hinterhand ;)
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Win32-Dll mit VB6 erstellen4.006aistudy26.11.12 10:45
Re: Win32-Dll mit VB6 erstellen2.555aistudy26.11.12 11:38
Re: Win32-Dll mit VB6 erstellen2.567wb-soft26.11.12 12:04
Re: Win32-Dll mit VB6 erstellen2.505aistudy26.11.12 14:20
Re: Win32-Dll mit VB6 erstellen2.580Manfred X26.11.12 18:37
Re: Win32-Dll mit VB6 erstellen2.512aistudy26.11.12 20:33
Re: Win32-Dll mit VB6 erstellen2.694Blackbox26.11.12 20:40
Re: Win32-Dll mit VB6 erstellen2.531aistudy27.11.12 16:40
Re: Win32-Dll mit VB6 erstellen2.550Blackbox28.11.12 18:28
Re: Win32-Dll mit VB6 erstellen2.489aistudy28.11.12 19:20
Re: Win32-Dll mit VB6 erstellen2.459Blackbox28.11.12 20:07
Re: Win32-Dll mit VB6 erstellen2.570aistudy28.11.12 20:58
Re: Win32-Dll mit VB6 erstellen2.454aistudy03.12.12 13:57
Re: Win32-Dll mit VB6 erstellen2.637Blackbox03.12.12 20:02
Re: Win32-Dll mit VB6 erstellen2.432aistudy03.12.12 20:21
Re: Win32-Dll mit VB6 erstellen2.396Franki08.12.12 04:17
Re: Win32-Dll mit VB6 erstellen2.431aistudy08.12.12 10:14
Re: Win32-Dll mit VB6 erstellen2.571Blackbox09.12.12 10:32
Wie findet man eine CLSID aus einer ActiveX.dll2.528Blackbox09.12.12 11:11
Re: Win32-Dll mit VB6 erstellen2.421aistudy09.12.12 11:36
Re: Win32-Dll mit VB6 erstellen2.456Blackbox09.12.12 18:09
Re: Win32-Dll mit VB6 erstellen2.436aistudy11.12.12 10:49
Re: Win32-Dll mit VB6 erstellen2.621Blackbox11.12.12 18:23
Re: Win32-Dll mit VB6 erstellen2.423aistudy11.12.12 18:33
Re: Win32-Dll mit VB6 erstellen2.498Blackbox11.12.12 19:13

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-2024 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