![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите переделать статистичн. вызов DLL в динамичный. [D7, Win95/98, WinME, NT4, Win2k, WinXP]
rolex © (2005-08-27 22:57:00)Вот так функция вызывается статистически:
function GetProfilesDirectory:string;
function ProfilesDirectory_Exp(lpProfilesDir:PChar; var lpcchSize:DWord):Bool;
stdcall; external 'userenv.dll' name 'GetProfilesDirectoryA';
var szBuffer:array[0..MAX_PATH] of Char; dwSize:DWord;
begin
dwSize := MAX_PATH;
if ProfilesDirectory_Exp(szBuffer, dwSize) then result:=szBuffer;
end;
А как сделать динамический? Делаю так:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TProfi = function(lpProfilesDir: PChar; var lpcchSize: DWord): Bool;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function GetProfilesDirectory: string;
var
hndDLLHandle: THandle;
Profi: TProfi;
szBuffer: array[0..MAX_PATH] of Char; dwSize: DWord;
begin
dwSize := MAX_PATH;
Result:='';
try
hndDLLHandle := loadLibrary('userenv.dll');
if hndDLLHandle <> 0 then
begin
@Profi := getProcAddress(hndDLLHandle, 'GetProfilesDirectoryA');
if addr(Profi) <> nil then
begin
Profi(szBuffer, dwSize);
Result := szBuffer;
end;
end;
finally
freeLibrary(hndDLLHandle);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
caption:=GetProfilesDirectory;
end;
end.
Ничего не вышло (кроме ошибки :) ).
rolex (2005-08-28 12:42:00) [1]спасибо огромное!
DiamondShark (2005-08-27 23:35:00) [2]
> type
> TProfi = function(lpProfilesDir: PChar; var lpcchSize:
> DWord): Bool;
TProfi = function(lpProfilesDir: PChar; var lpcchSize: DWord): Bool; stdcall;