Hi,
die OCX-Datei einfach in einen Ordner zu kopieren, reicht womöglich nicht; die Datei muss auch registriert werden.
Anbei findest du den Code, um einen Registrierer selbst zu bauen. Wenn der Registrierer gestartet ist, bleibt er oben auf, und man kann im Explorer die Datei aufsuchen und mit Drag'n'Drop in das Textfeld bringen.
Dann einfach die "Register"- oder - je nachdem - die "Un-Register"-Taste betätigen. Erfolg oder Misserfolg werden angezeigt.
Der Registrierer arbeitet nur mit OCX- oder DLL-Dateien.
OCX- oder DLL-Dateien sollten nach Möglichkeit immer in das Windows-System-Verzeichnis
kopiert werden. Mit Hilfe dieses Registrierers ist das dann eine saubere Lösung.
Sollte die eine oder andere OCX oder DLL ausgetauscht werden müssen, empfiehlt sich immer die Reihenfolge:
Registrierer aufmachen;
Datei einlesen (Drag'n'Drop);
Taste zum De-Registrieren ausführen. Registrierer offen lassen !
Datei austauschen;
Taste zum Registrieren drücken. Fertig.
Sollte irgend etwas nicht funktionieren, kannst du dich bei SG@SGSiS.de melden.
Gruss
Sovereign Sylvia
P.S.: Ich würde an deiner Stelle kein ADODC verwenden, das sind echte Speed-Bremser. Benutze lieber ein ADODB.Recordset und binde das Frontend-Listenelement (oder was auch immer) daran.
Project "OCX-DLL-Register" für VB6:
1) Neues Project öffnen; eine Form ist autmatisch hinzugefügt.
Eigenschaft "BorderStyle" auf "1 - Fest Einfach"
2) Ein Module hinzufügen.
3) Auf der Form werden gebraucht:
3 Command Buttons (Namen: "cmdReg", "cmdUnReg" und "Command1")
(Captions: "Register", "Un-Register" und "Close")
1 Text-Feld ("txtReg") mit Height=255 und Width=4695
WICHTIG: Eigenschaften "OLEDragMode" auf Automatisch und "OLEDropMode" auf Manuell.
1 Label ("Label1"); "AutoSize" = True und "Visible" = False
Dieses Label dient nur dazu, bei Dateien, die über Drag'n'Drop eingeladen werden, sich auf die Länge des Pfad-Textes einzuschiessen und in gewissen Grenzen die Breite des Textfeldes und der Form anzupassen.
4) Auf der Form folgenden Code eingeben (kann direct von hier kopiert werden:
'#############################################
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, _
ByVal cy As Long, ByVal wFlags As Long) As Long
Private Sub Form_Load()
On Error GoTo errorhandler
If Command$ "" Then
Me.Label1.Caption = Command$
Me.txtReg.Width = Me.Label1.Width + 100
Me.Width = Me.Label1.Left + Me.Label1.Width + 300
If Me.txtReg.Width If Me.Width Me.txtReg.Text = Me.Label1.Caption
If InStr(Me.txtReg.Text, Chr(34)) = 1 Then Me.txtReg.Text = Mid$(Me.txtReg.Text, 2, Len(Me.txtReg.Text) - 2)
End If
Me.Show
SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, &H3 'Keeps the window on top
Me.Left = Screen.Width / 2 - Me.Width / 2
Me.Top = Screen.Height / 2 - Me.Height / 2
Exit Sub
errorhandler:
End Sub
Private Sub cmdReg_Click()
Dim p_return As String
If Me.txtReg.Text "" Then
p_return = RegUnReg(Me.txtReg.Text)
If p_return "" Then
MsgBox p_return, 16, "Registering failed !"
Else
MsgBox "Registering succeeded !", vbInformation, "RegUnReg"
End If
Else
MsgBox "Nothing entered.", 48, "We don't register empties."
End If
End Sub
Private Sub cmdUnReg_Click()
Dim p_return As String
If Me.txtReg.Text "" Then
p_return = RegUnReg(Me.txtReg.Text, "U")
If p_return "" Then
MsgBox p_return, 16, "Un-Registering failed !"
Else
MsgBox "Unregistering succeeded !", vbInformation, "RegUnReg"
End If
Else
MsgBox "Nothing entered.", 48, "We don't unregister empties."
End If
End Sub
Private Sub Command1_Click()
Unload Me
End Sub
Private Sub txtReg_Change()
If Dir(Me.txtReg) = "" Or _
Me.txtReg = "" Or _
(LCase$(Right$(Me.txtReg, 3)) "ocx" And _
LCase$(Right$(Me.txtReg, 3)) "dll") Then
Me.cmdReg.Enabled = False
Me.cmdUnReg.Enabled = False
Else
Me.cmdReg.Enabled = True
Me.cmdUnReg.Enabled = True
End If
End Sub
Private Sub txtReg_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
On Error GoTo errorhandler
Me.txtReg.Text = ""
Me.Label1.Caption = Data.Files(1)
Me.txtReg.Width = Me.Label1.Width + 100
Me.Width = Me.Label1.Left + Me.Label1.Width + 300
If Me.txtReg.Width If Me.Width Me.txtReg.Text = Me.Label1.Caption
Exit Sub
errorhandler:
End Sub
'#############################################
5) Auf dem Module folgenden Code eingeben:
'#############################################
Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
(ByVal lpClassName As Any, ByVal lpWindowName As Any) As Long
Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" _
(ByVal lpLibFileName As String) As Long
Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, _
ByVal lpProcName As String) As Long
Declare Function CreateThread Lib "kernel32" (lpThreadAttributes As Any, _
ByVal dwStackSize As Long, ByVal lpStartAddress As Long, _
ByVal lParameter As Long, ByVal dwCreationFlags As Long, _
lpThreadID As Long) As Long
Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, _
ByVal dwMilliseconds As Long) As Long
Declare Function GetExitCodeThread Lib "kernel32" (ByVal hThread As Long, _
lpExitCode As Long) As Long
Declare Sub ExitThread Lib "kernel32" (ByVal dwExitCode As Long)
Function RegUnReg(ByVal sFile As String, Optional sHandle As String = "") As String
Dim lLib As Long
Dim lpDLLEntryPoint As Long
Dim lpThreadID As Long
Dim lpExitCode As Long
Dim mThread
Dim mResult
lLib = LoadLibrary(sFile)
If lLib = 0 Then
' //File not exists or not a valid DLL file
RegUnReg = "Error loading control DLL"
Exit Function
End If
If sHandle = "" Then
lpDLLEntryPoint = GetProcAddress(lLib, "DllRegisterServer")
ElseIf sHandle = "U" Or sHandle = "u" Then '//Unregister Server
lpDLLEntryPoint = GetProcAddress(lLib, "DllUnregisterServer")
Else
RegUnReg = "Unknown command handle"
Exit Function
End If
If lpDLLEntryPoint = vbNull Or lpDLLEntryPoint = 0 Then
GoTo Exit1
End If
mThread = CreateThread(ByVal 0, 0, ByVal lpDLLEntryPoint, _
ByVal 0, 0, lpThreadID)
If mThread = 0 Then
GoTo Exit1
End If
mResult = WaitForSingleObject(mThread, 10000)
If mResult 0 Then
GoTo Exit2
End If
CloseHandle mThread
FreeLibrary lLib
Exit Function
Exit1:
RegUnReg = "Registration failed in obtaining entry point or creating thread for " & sFile & "."
FreeLibrary lLib
Exit Function
Exit2:
RegUnReg = "Registration failed in signaled state or time-out for " & sFile & "."
FreeLibrary lLib
lpExitCode = GetExitCodeThread(mThread, lpExitCode)
ExitThread lpExitCode
End Function
'#############################################