PDA

View Full Version : سوال: نحوه رجیستر کردن dll



aminaltavista
سه شنبه 26 بهمن 1389, 15:40 عصر
سلام دوستان راستش یه ستاپ از یه برنامه درست کردم که تو یه سیستم دیگه وقتی نصبش میکنم برنامه رو که اجرا می کنم میگه این کامپوننت رجیستر نشده
برای رجیستر کردنش باید چه کار کنم؟:گیج:

Restlesa
چهارشنبه 27 بهمن 1389, 13:33 عصر
دستور زیر رو در قسمت run سیستم خودت اجرا کنی فایل dll رجیستر میشه و اگه در سیستم های دیگه ازش استفاده کنی هیچ مشکلی برات پیش نمی یاد.

regsvr32 "مسیر فایل dll مورد نظر"

returnx
چهارشنبه 27 بهمن 1389, 21:36 عصر
متاسفانه برای منError میده، تو Error مینویسه که سرور رجیستر کننده رو پیدا نمیکنه(یه همچین چیزی)
عکس Error رو گذاشتم ...
لطفا راهنمایی کنید...

parselearn
پنج شنبه 28 بهمن 1389, 07:29 صبح
معمولا ستاپسازها قابليت رجيستر كردن كامپوننت را دارند.



متاسفانه برای منError میده، تو Error مینویسه که سرور رجیستر کننده رو پیدا نمیکنه(یه همچین چیزی)
عکس Error رو گذاشتم ...
لطفا راهنمایی کنید...

واژه regsvr32 را در سايت جستجو كنيد
پيام واضح است: كامپوننت را پيدا نميكنه




روش ديگر:





Option Explicit

Private Const CREATE_SUSPENDED = &H4
Private Const INFINITE = &HFFFFFFFF
Private Const STATUS_WAIT_0 = &H0
Private Const STATUS_ABANDONED_WAIT_0 = &H80
Private Const STATUS_TIMEOUT = &H102
Private Const WAIT_FAILED = &HFFFFFFFF
Private Const WAIT_OBJECT_0 = ((STATUS_WAIT_0) + 0)
Private Const WAIT_ABANDONED = ((STATUS_ABANDONED_WAIT_0) + 0)
Private Const WAIT_TIMEOUT = STATUS_TIMEOUT
Private Const STATUS_PENDING = &H103
Private Const STILL_ACTIVE = STATUS_PENDING

Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" _
(ByVal lpLibFileName As String) As Long

Private Declare Function FreeLibrary Lib "kernel32" _
(ByVal hLibModule As Long) 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, _
lpStartAddress As Long, lpParameter As Any, _
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 CloseHandle Lib "kernel32" _
(ByVal hObject As Long) As Long

Private Declare Sub ExitThread Lib "kernel32" (ByVal dwExitCode As Long)

Private Declare Function ResumeThread Lib "kernel32" _
(ByVal hThread As Long) As Long

Private Declare Function GetExitCodeThread Lib "kernel32" _
(ByVal hThread As Long, lpExitCode As Long) As Long

Public Function fVBRegServer(ByVal strFilePath As String, Optional ByVal blnRegister = True) As Boolean

Dim lngModuleHandle As Long
Dim lngFunctionAdr As Long
Dim lngThreadID As Long
Dim lngThreadHandle As Long
Dim lngExitCode As Long
Dim blnSuccess As Boolean

lngModuleHandle = LoadLibrary(strFilePath)

If blnRegister Then
lngFunctionAdr = GetProcAddress(lngModuleHandle, "DllRegisterServer")
Else
lngFunctionAdr = GetProcAddress(lngModuleHandle, "DllUnregisterServer")
End If

If lngFunctionAdr <> 0 Then

lngThreadHandle = CreateThread(ByVal 0, 0, ByVal lngFunctionAdr, ByVal 0, 0, lngThreadID)

If lngThreadHandle Then

blnSuccess = (WaitForSingleObject(lngThreadHandle, 10000) = WAIT_OBJECT_0)

If Not blnSuccess Then

Call GetExitCodeThread(lngThreadHandle, lngExitCode)
Call ExitThread(lngExitCode)
End If

Call CloseHandle(lngThreadHandle)
End If
End If

If lngModuleHandle Then Call FreeLibrary(lngModuleHandle)

fVBRegServer = blnSuccess
End Function

Public Function IsDLLActiveX(ByVal strDLLPath As String, Optional ByVal RaiseError As Boolean) As Boolean
Dim lngHMod As Long
Dim lngLastDllError As Long

lngHMod = LoadLibrary(strDLLPath)

If lngHMod = 0 Then
If RaiseError Then
lngLastDllError = Err.LastDllError
Err.Raise 10000 + lngLastDllError, "IsDLLActiveX", "LoadLibrary-Error: " & lngLastDllError
End If
End If

IsDLLActiveX = Abs(CBool(GetProcAddress(lngHMod, "DllRegisterServer")))
Call FreeLibrary(lngHMod)
End Function




fVBRegServer St + "\btn.ocx", True

aminaltavista
پنج شنبه 28 بهمن 1389, 07:53 صبح
معمولا ستاپسازها قابليت رجيستر كردن كامپوننت را دارند.




واژه regsvr32 را در سايت جستجو كنيد
پيام واضح است: كامپوننت را پيدا نميكنه




روش ديگر:





Option Explicit

Private Const CREATE_SUSPENDED = &H4
Private Const INFINITE = &HFFFFFFFF
Private Const STATUS_WAIT_0 = &H0
Private Const STATUS_ABANDONED_WAIT_0 = &H80
Private Const STATUS_TIMEOUT = &H102
Private Const WAIT_FAILED = &HFFFFFFFF
Private Const WAIT_OBJECT_0 = ((STATUS_WAIT_0) + 0)
Private Const WAIT_ABANDONED = ((STATUS_ABANDONED_WAIT_0) + 0)
Private Const WAIT_TIMEOUT = STATUS_TIMEOUT
Private Const STATUS_PENDING = &H103
Private Const STILL_ACTIVE = STATUS_PENDING

Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" _
(ByVal lpLibFileName As String) As Long

Private Declare Function FreeLibrary Lib "kernel32" _
(ByVal hLibModule As Long) 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, _
lpStartAddress As Long, lpParameter As Any, _
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 CloseHandle Lib "kernel32" _
(ByVal hObject As Long) As Long

Private Declare Sub ExitThread Lib "kernel32" (ByVal dwExitCode As Long)

Private Declare Function ResumeThread Lib "kernel32" _
(ByVal hThread As Long) As Long

Private Declare Function GetExitCodeThread Lib "kernel32" _
(ByVal hThread As Long, lpExitCode As Long) As Long

Public Function fVBRegServer(ByVal strFilePath As String, Optional ByVal blnRegister = True) As Boolean

Dim lngModuleHandle As Long
Dim lngFunctionAdr As Long
Dim lngThreadID As Long
Dim lngThreadHandle As Long
Dim lngExitCode As Long
Dim blnSuccess As Boolean

lngModuleHandle = LoadLibrary(strFilePath)

If blnRegister Then
lngFunctionAdr = GetProcAddress(lngModuleHandle, "DllRegisterServer")
Else
lngFunctionAdr = GetProcAddress(lngModuleHandle, "DllUnregisterServer")
End If

If lngFunctionAdr <> 0 Then

lngThreadHandle = CreateThread(ByVal 0, 0, ByVal lngFunctionAdr, ByVal 0, 0, lngThreadID)

If lngThreadHandle Then

blnSuccess = (WaitForSingleObject(lngThreadHandle, 10000) = WAIT_OBJECT_0)

If Not blnSuccess Then

Call GetExitCodeThread(lngThreadHandle, lngExitCode)
Call ExitThread(lngExitCode)
End If

Call CloseHandle(lngThreadHandle)
End If
End If

If lngModuleHandle Then Call FreeLibrary(lngModuleHandle)

fVBRegServer = blnSuccess
End Function

Public Function IsDLLActiveX(ByVal strDLLPath As String, Optional ByVal RaiseError As Boolean) As Boolean
Dim lngHMod As Long
Dim lngLastDllError As Long

lngHMod = LoadLibrary(strDLLPath)

If lngHMod = 0 Then
If RaiseError Then
lngLastDllError = Err.LastDllError
Err.Raise 10000 + lngLastDllError, "IsDLLActiveX", "LoadLibrary-Error: " & lngLastDllError
End If
End If

IsDLLActiveX = Abs(CBool(GetProcAddress(lngHMod, "DllRegisterServer")))
Call FreeLibrary(lngHMod)
End Function



fVBRegServer St + "\btn.ocx", True
میشه بیشتر توضیح بدید من نمی فهمم!:گیج:

parselearn
پنج شنبه 28 بهمن 1389, 09:21 صبح
چي رو نمي فهميد!؟

از چه ستاپسازي استفاده ميكنيد. ستاپسازها قابليت رجيستر كامپوننت را دارند
ميتوانيد از smart install maker استفاده كنيد. در بخش مقالات آموزشش هست


روش ديگر:
براي كد هم. كد را درماژولي قرار دهيد و با تابع fVBRegServer فايل را رجيستر كنيد

returnx
پنج شنبه 28 بهمن 1389, 13:12 عصر
واژه regsvr32 را در سايت جستجو كنيد
پيام واضح است: كامپوننت را پيدا نميكنه
نه،همونطور که در error می بینید میگه فایل Dll لود شده اما رجیستر نشده یعنی فایل رو پیدا کرده ...
در ضمن من در یکی از تاپیک ها هم یه برنامه گرفته بودم برای رجیستر کردن که یک فایل Bat می ساخت بعد فایل Bat رو اجرا میکرد و توسط همین برنامه regsvr32 فایل رو رجیستر می کرد،این برنامه هم نتونست فایل رو رجیستر کنه...
مطمئنا مشکل از آدرس نیست...