Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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]

Если ничегоне получается
значит всенеправильно.


Наверх

Титульная страница Поиск, карта сайта Написать письмо