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 فایل رو رجیستر می کرد،این برنامه هم نتونست فایل رو رجیستر کنه...
مطمئنا مشکل از آدرس نیست...
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.