![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DLL - Plugin [D6, Win95/98]
SkyRanger © (2005-03-09 09:38:00)Вообщем решил я поробовать сделать плагин, создаю такую вот DLL:
library PkgUtils;
uses
SysUtils,
Classes;
const
CAutorStr = 'SkyRanger';
CInfoStr = 'Plugin 1.0';
function GetPluginAutor:String; stdcall;
begin
Result:=CAutorStr;
end;
function GetPluginInfo:String; stdcall;
begin
Result:=CInfoStr;
end;
function MyProc:String; stdcall;
begin
Result:=CInfoStr;
end;
exports
GetPluginAutor,
GetPluginInfo,
MyProc;
{$R *.res}
begin
end.
и ее пробую загрузить проверить что она плагин:
var
DllH :HModule;
DllProcPtr : TDllProc;
if DllH=0 then
begin
DllH:=LoadLibrary('PkgUtils.dll');
if DllH=0 then
begin
ShowMessage('Ошибка загрузки DLL');
exit;
end;
@DllProcPtr := GetProcAddress(DllH,'GetPluginAutor');
if not Assigned(DllProcPtr) then
FreeLibrary(DllH);
DllH:=0;
ShowMessage('Данный файл не является плагином');
exit;
end;
DllProcPtr;
FreeLibrary(DllH);
DllH:=0;
и ничего не получается... Где я ошибся, вроде все делал как написано в FAQ...
SkyRanger (2005-03-10 09:01:00) [1]Тааак...
Пора завязывать задавать вопросы рано утром и в конце рабочего дня... Туплю...
Все заработало, всем спасибо!
SkyRanger (2005-03-10 02:38:00) [2]Вот новая версия и все равно нефига не работает!
TDllProc = function:PChar;
var
Form1: TForm1;
DllH :HModule;
DllProcPtr : TDllProc;
function GetPluginAutor:PChar; external 'Plugin.dll';
if DllH=0 then
begin
DllH:=LoadLibrary('PkgUtils.dll');
if DllH=0 then
begin
ShowMessage('Ошибка загрузки DLL');
exit;
end;
M.Lines.Add(GetPluginAutor);
@DllProcPtr := GetProcAddress(DllH,'GetPluginAutor');
if not Assigned(DllProcPtr) then
FreeLibrary(DllH);
DllH:=0;
ShowMessage('Данный файл не является плагином');
exit;
end;
DllProcPtr;
FreeLibrary(DllH);
DllH:=0;
Все строки как Pchar
library PkgUtils;
uses
Classes;
const
CAutorStr = 'Vasily V. Altunin, 2005';
CInfoStr = 'DLL plugin';
function GetPluginAutor:PChar;
begin
Result:=CAutorStr;
end;
function GetPluginInfo:PChar;
begin
Result:=CInfoStr;
end;
function MyProc:PChar;
begin
Result:=CInfoStr;
end;
exports
GetPluginAutor,
GetPluginInfo,
MyProc;
begin
end.
Причем M.Lines.Add(GetPluginAutor); работает как положенно но признавать как плагин все равно DLL не хочет…
Чапаев (2005-03-09 10:11:00) [3]1. Как объявлен TDllProc?
2. Таки или string -> PChar, или прочти комментарий, который пишет DLL wizard.
BiN (2005-03-09 09:44:00) [4]SkyRanger © (09.03.05 09:38)
... Где я ошибся
Читаем комментарий, который ты удалил, до полного просветления.
Да, и stdcall у тебя к чему?
Sergey_Masloff (2005-03-09 09:43:00) [5]Как минимум если передаешь строки (хоть это и изврат) то где у тебя ShareMem?
Думкин (2005-03-09 09:42:00) [6]Для начала:
uses SysUtils,
.....
function GetPluginInfo: String
Sergey_Masloff (2005-03-09 09:41:00) [7]Если ничегоне получается
значит всенеправильно.