PDA

View Full Version : چگونه یک ocx را در vb رجیستر کنیم.



mohammadS
پنج شنبه 17 فروردین 1385, 20:24 عصر
چگونه یک ocx را در vb رجیستر کنیم.

بابک زواری
پنج شنبه 17 فروردین 1385, 20:51 عصر
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName As Any) 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 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
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function GetExitCodeThread Lib "kernel32" (ByVal hThread As Long, lpExitCode As Long) As Long
Private Declare Sub ExitThread Lib "kernel32" (ByVal dwExitCode As Long)
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Dim Reg As String, Success As Boolean
Dim mresult
Public Function RegUnReg(ByVal inFileSpec As String, Optional inHandle As String = "") As Boolean
On Error Resume Next
Dim lLib As Long ' Store handle of the control library
Dim lpDLLEntryPoint As Long ' Store the address of function called
Dim lpThreadID As Long ' Pointer that receives the thread identifier
Dim lpExitCode As Long ' Exit code of GetExitCodeThread
Dim mThread

' Load the control DLL, i. e. map the specified DLL file into the
' address space of the calling process
lLib = LoadLibrary(inFileSpec)
If lLib = 0 Then
' e.g. file not exists or not a valid DLL file
MsgBox "Failure loading control DLL", vbCritical + vbOKOnly, "Error 1"
'XMsgbox "ÝÇíá C:\PhotoAssistant\devbox.ocx ÏÑãÓíÑ ÈÑäÇãå äíÓÊ ", Taeed
Exit Function
End If

' Find and store the DLL entry point, i.e. obtain the address of the
' “DllRegisterServer” or "DllUnregisterServer" function (to register
' or deregister the server’s components in the registry).
'
If inHandle = "" Then
lpDLLEntryPoint = GetProcAddress(lLib, "DllRegisterServer")
ElseIf inHandle = "U" Or inHandle = "u" Then
lpDLLEntryPoint = GetProcAddress(lLib, "DllUnregisterServer")
Else
MsgBox "Unknown command handle", vbCritical + vbOKOnly, "Error 1"
Exit Function
End If
If lpDLLEntryPoint = vbNull Or lpDLLEntryPoint = 0 Then
GoTo earlyExit1
End If

Screen.MousePointer = vbHourglass

' Create a thread to execute within the virtual address space of the calling process
mThread = CreateThread(ByVal 0, 0, ByVal lpDLLEntryPoint, ByVal 0, 0, lpThreadID)
If mThread = 0 Then
GoTo earlyExit1
End If

' Use WaitForSingleObject to check the return state (i) when the specified object
' is in the signaled state or (ii) when the time-out interval elapses. This
' function can be used to test Process and Thread.
mresult = WaitForSingleObject(mThread, 10000)
If mresult <> 0 Then
GoTo earlyExit2
End If

' We don't call the dangerous TerminateThread(); after the last handle
' to an object is closed, the object is removed from the system.
CloseHandle mThread
FreeLibrary lLib

Screen.MousePointer = vbDefault
RegUnReg = True
'Success = True
Exit Function


earlyExit1:
Screen.MousePointer = vbDefault
MsgBox "Registration failed in obtaining entry point or creating thread for " & inFileSpec & ".", vbCritical, "Registration Failed!"
' Decrements the reference count of loaded DLL module before leaving
FreeLibrary lLib
RegUnReg = False
'Success = False
Exit Function

earlyExit2:
RegUnReg = False
'Success = False
Screen.MousePointer = vbDefault
MsgBox "Registration failed in signaled state or time-out for " & inFileSpec & ".", vbCritical, "Registration Failed!"
FreeLibrary lLib
' Terminate the thread to free up resources that are used by the thread
' NB Calling ExitThread for an application's primary thread will cause
' the application to terminate
lpExitCode = GetExitCodeThread(mThread, lpExitCode)
ExitThread lpExitCode
End Function

Payman62
پنج شنبه 17 فروردین 1385, 21:11 عصر
جناب زواری چه خوب که امضاتو عوض کردی. قبلی خیلی خشن بود.

amirsadeghi
شنبه 28 مرداد 1385, 14:36 عصر
سلام با فرمان declare function هم میشه

rapboy_eminemfbaz
جمعه 07 مهر 1385, 16:03 عصر
vay khoda ajab vb karay herfeyy peyda mishan azizam ba declare function API haro tarif mikonan na Ocx register