Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.08.2009, 15:18   #1
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
Восклицание DLL

Вот в чем проблема... я создал DLL ресурсами, но если с програмы я пытаюсь вывести эти ресурсы то пишет что не имеет точки входа в процедуру...

Dll:
Код:
library pic;
uses
  SysUtils,
  Classes,windows;

{$R *.res}
{$R 0.res}
{$R 1.res}
{$R 2.res}
{$R 3.res}
{$R 4.res}
{$R 5.res}
{$R 6.res}
{$R 7.res}
{$R 8.res}
{$R 9.res}
{$R 10.res}
{$R 11.res}
{$R 12.res}

function WindowsDir: string; external 'data.dll';

procedure ExtractRes(ResType, ResName, ResNewName : String);
var
  Res : TResourceStream;
begin
  Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
  Res.SavetoFile(ResNewName);
  Res.Free;
end;

procedure ExtractResFromDLL(s:integer);
begin
ExtractRes('PNG'+inttostr(s), 'PIC',WindowsDir+'\'+inttostr(s)+'.png')

end;

exports ExtractResFromDLL, ExtractRes;
end.
Form1:
Код:
procedure ExtractRes(ResType, ResName, ResNewName : String); external 'pic.dll';
procedure ExtractResFromDll(s:integer); external 'pic.dll';

procedure TForm1.N8Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to 12 do begin
ExtractResFromDll(i);
end;
end;
W0LF вне форума Ответить с цитированием
Старый 16.08.2009, 15:25   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

для начала прочитать, то что пишшется в комменте чистого модуля
(про тип string)
а если через динамическое подключение?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.08.2009, 16:28   #3
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

подключил динамически, первая картинка выходит с ресурсов, но потом сразу ошипка...

.....'Invalid pointer operation'......

Код:
var
  ExtractResFromDLL: procedure(s:integer);
  LibHandle: THandle;
begin
  @ExtractResFromDLL := nil;
  LibHandle := LoadLibrary('pic.dll');
  if LibHandle >= 32 then begin
  @ExtractResFromDLL := GetProcAddress(LibHandle,'ExtractResFromDLL');
   if @ExtractResFromDLL <> nil then begin
   for i:=0 to 12 do begin
  ExtractResFromDll(i);
  end; //после ошипки сразу эта строка выделяеться цветом (у меня синим, но у меня другая расцветка стоит)
  FreeLibrary(LibHandle);
  end;
  end;
W0LF вне форума Ответить с цитированием
Старый 16.08.2009, 16:35   #4
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Я не знаю, но может быть это из-за того что у вас в DLL-ке процедура имеет имя "...Dll", а в модуле "...DLL"?.. Попробуйте одинаковое.
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 16.08.2009, 16:42   #5
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

не, в модуле таже самая ...DLL
W0LF вне форума Ответить с цитированием
Старый 16.08.2009, 16:44   #6
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Код:
@ExtractResFromDLL := GetProcAddress(LibHandle,'ExtractResFromDLL');
Попробуйте убрать собачку.
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 16.08.2009, 16:44   #7
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,485
По умолчанию

А зачем столько гемору ))

Вот Исходник DLL;
Код:
library Pic;

uses
  SysUtils,
  Classes, Windows;

{$R *.res}
{$R png.res}

procedure ExtractRes(ResType, ResName, ResNewName : String);
function GetWin: string;
var
 Win: Cardinal;
 Comp: array[0..MAX_PATH] of Char;
begin
  GetWindowsDirectory(Comp,Win);
  Result:= Comp;
end;
var
  Res : TResourceStream;
begin
  Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
  Res.SavetoFile(GetWin +'\'+ResNewName);
  Res.Free;
end;

Вот EXE;

Код:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    btn1: TButton;
    btn2: TButton;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure ExtractRes(ResType, ResName, ResNewName : String); external 'pic.dll';
procedure TForm1.btn1Click(Sender: TObject);
 var
 i:integer;
 begin
  for i:=0 to 5 do begin
   ExtractRes('PIC', 'PNG' + IntToStr(i),IntToStr(i) +'.bmp');
  end;
end;
end.
uberchel вне форума Ответить с цитированием
Старый 16.08.2009, 16:54   #8
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

так это уменя и есть))

уже сделал, проблема была в .... а фиг знает, просто вместо цыкла так все подряд прописал ресурсы, оно их по очереди и выковыряло..

спс всем
W0LF вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
dll Maxxx 83 Помощь студентам 5 01.02.2009 14:49
DLL MusicMan Помощь студентам 3 21.04.2008 21:30
.DLL ZhekON Общие вопросы Delphi 3 20.05.2007 21:02
DLL Shico Win Api 1 16.04.2007 16:24