Вопросы по dll на Delphi

 

1) Q:

Вопрос в следующем: хочу создать dll, скажем, такую:

library Project2;
uses
SysUtils,
Classes;
Function MyFun(Param: integer): integer; stdcall;
begin
MyFun:=Param+5;
end;
{$R *.RES}
Exports
MyFun Name 'MyFun';
begin
end.

Она вроде бы создается, но при попытке открыть ее средствами Делфи, говорит, что ошибка открытия бибилиотеки. Если ее попробовать зарегистрировать в реестре RegSvr32 Library.dll, опять же ругается:
library.dll was loaded, but the DllRegisterServer entry point was
not found.
Кто знает, подскажите, плиз, чего делать-то ?

A:

Допустим, тебе все же нужна обычная dll, а не COM-сервер. Тогда саму dll ты написал правильно, далее два варианта:
**1**
interface
...
function MyFun(Param: integer):integer; stdcall; external 'Proj
ect1.dll' name 'MyFun';
...
implementation
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(MyFun(4)));
end;
**2**
type
PMyFun=function(Param: integer): integer; stdcall;
...
implementation
procedure TForm1.Button1Click(Sender: TO
bject);
var
h: HINST;
MyFun: PMyFun;
begin
h:=LoadLibrary('Project1.dll'); //загружаем dll
@MyFun:=GetProcAddress(h, 'MyFun'); //получаем адрес функции
ShowMessage(IntToStr(MyFun(4)));
FreeLibrary(h); //выгружаем dll
end;
RegSvr32 применяется для регистрации в реестре COM-серверов. Такие dll отличаются, в частности, наличием функции DllRegisterServer.
Если нужен именно COM (т.е. CoCreateInstance, CreateComObject, CreateOleObject etc.), -- напишу.

 

 

 

 

Хостинг от uCoz