PDA

نسخه کامل مشاهده نسخه کامل : سوال: چطور يك dll رو در كامپيوتر كاربر (نه سيستم خودم ) رجيستر كنم ؟



hp1361
13-08-2006, 19:33
سلام

دوستان راهنمايي بفرماين چطور يه دي ال ال رو با كد برنامه در سيستم كاربر رجيستر كنم

ممنون و منتظرم

Irdg
14-08-2006, 00:28
سلام. يك يونيت جديد بساز و اين كدها رو داخلش وارد كن

unit axutils;

interface

uses
Windows, SysUtils;

type
TDllRegisterServer = function: HResult; stdcall;
TDllUnregisterServer = function: HResult; stdcall;

const
LIB_REGISTER = 'DllRegisterServer';
LIB_UNREGISTER = 'DllUnregisterServer';

function IsHandle(Handle: THandle): Boolean;
function RegisterLibrary(szLibrary: String): Integer;
function UnRegisterLibrary(szLibrary: String): Integer;

implementation

function IsHandle(Handle: THandle): Boolean;
begin

// Determine if a valid handle
result:=(Handle <> 0);

end;

function RegisterLibrary(szLibrary: String): Integer;
var hLib: THandle;
drs: TDllRegisterServer;
begin

// Attempt to load the library
hLib:=LoadLibrary(PChar(szLibrary));

// Handle check
if IsHandle(hLib) then
begin
// Get the register function
@drs:=GetProcAddress(hLib, LIB_REGISTER);
if Assigned(@drs) then
// Make the function call
result:=drs
else
// Return last error
result:=GetLastError;
// Unload the library
FreeLibrary(hLib);
end
else
// Return last error
result:=GetLastError;

end;

function UnRegisterLibrary(szLibrary: String): Integer;
var hLib: THandle;
dus: TDllUnregisterServer;
begin

// Attempt to load the library
hLib:=LoadLibrary(PChar(szLibrary));

// Handle check
if IsHandle(hLib) then
begin
// Get the unregister function
@dus:=GetProcAddress(hLib, LIB_UNREGISTER);
if Assigned(@dus) then
// Make the function call
result:=dus
else
// Return last error
result:=GetLastError;
// Unload the library
FreeLibrary(hLib);
end
else
// Return last error
result:=GetLastError;

end;

end.




--اين هم كد نمونه ---

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, axutils;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
if RegisterLibrary('c:\windows\system32\venc.ocx') = 0 then
ShowMessage('Registered');
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if UnregisterLibrary('c:\windows\system32\venc.ocx') = 0 then
ShowMessage('Unregistered');
end;

end.

delphi.net8
15-08-2006, 00:15
اوووووه يه راه ساده با استفاده از shellexecute ميشه همين كار رو انجام داد
يعني بنويسي


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

يه چيز تو اين مايه ها اگه درست نوشته باشم
سوييچ I براي install سوييچ U براي unistall بكار ميره

hp1361
15-08-2006, 20:46
سلام
irdg عزيز دستتون درد نكنه

delphi.net عزيز دست شما هم درد نكنه .

هر دوتا كد رو امتحان مي كنم و خبرشو مي دم

فقط دلفي دات نت عزيز اگه يه كد هم مي نوشتي كه قبلش تست كنيم ايا فايل دي ال ال رجيستر شده يا نه خيلي خوب ميشد

بازم ممنون

يا حق