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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.01.2011, 13:26   #1
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию Трабл с экспортом функций из dll

Здравствуйте.

есть код примерно такова вида

Код:
program abc;

const
  kernel32 = 'kernel32.dll';
  GENERIC_READ = INTEGER($80000000);
  FILE_SHARE_READ = $00000001;
  FILE_ATTRIBUTE_NORMAL = $00000080;
  OPEN_EXISTING = 3;
type
  BOOL     = BOOLEAN;
  DWORD    = INTEGER;
  THandle  = INTEGER;
  HMODULE  = INTEGER;
  FARPROC  = Pointer;
  LPCSTR   = PAnsiChar;

var
  CreateFile        : function(lpFileName: PChar; dwDesiredAccess, dwShareMode: DWORD; lpSecurityAttributes: PSecurityAttributes; dwCreationDisposition, dwFlagsAndAttributes: DWORD; hTemplateFile: THandle) : THandle;
  CloseHandle       : function(hObject: THandle): BOOL;

function LoadLibrary(lpLibFileName: PChar): HMODULE; stdcall; external kernel32 name 'LoadLibraryA';
function GetProcAddress(hModule: HMODULE; lpProcName: LPCSTR): FARPROC; stdcall; external kernel32 name 'GetProcAddress';
function FreeLibrary(hLibModule: HMODULE): BOOL; stdcall; external kernel32 name 'FreeLibrary';

Procedure Cp(F:PChar);
var
  f1 : integer;
  h   : Integer;
begin
  H:= LoadLibrary(kernel32);
  //Гружу библиотеку, но по идее она уже подключена, нужен всего лишь
  //Дескриптор!
  @CreateFile:= GetProcAddress(h,'CreateFileA');
  f1:=CreateFile(F,GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING, 0,0);
  if f1<>-1 then
  begin
    @CloseHandle:= GetProcAddress(h,'CloseHandle');
    CloseHandle(f1);
  end;
  FreeLibrary(h);
end;
Я первый раз имею дело с таким экспортом, немного ещё не в теме.
Данный код не работает, CreateFile вседа возвращает -1, мне кажется дело в том что библиотека уже подключена. Как можно узнать дескриптор? Или как заставить этот код работать???

Последний раз редактировалось dolphin705; 02.01.2011 в 19:36.
dolphin705 вне форума Ответить с цитированием
Старый 02.01.2011, 13:34   #2
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

А если h: THandle;
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 02.01.2011, 13:41   #3
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Valio, в данном случае это ничего не изменит, т.к. тип THandle переопределён.
dolphin705 вне форума Ответить с цитированием
Старый 02.01.2011, 17:39   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

GetLastError что говорит?(для отладки подключите лишнее) или сами найдите реализацию исключения LastOSError
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.01.2011, 18:32   #5
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

WTF is this?

Код:
var
  f1 : integer;

  f1h:=CreateFile(f1,GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING, 0,0);
  if f1<>-1 then
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 02.01.2011, 19:26   #6
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Сори щас поправим

Последний раз редактировалось dolphin705; 02.01.2011 в 19:33.
dolphin705 вне форума Ответить с цитированием
Старый 02.01.2011, 23:14   #7
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Пепел Феникса, GetLastError говорит ошибка 87
dolphin705 вне форума Ответить с цитированием
Старый 03.01.2011, 02:52   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
0x57 — The parameter is incorrect. ERROR_INVALID_PARAMETER
проверяйте параметры(мне почему то кажется что предпоследний, может и не прав)

кстати, а причем тут экспорт? у вас импорт вообще то.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.01.2011, 15:41   #9
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Вот код

Код:
var
F1,H : integer;
CreatFile : function(lpFileName: PChar; dwDesiredAccess, dwShareMode: DWORD; lpSecurityAttributes: PSecurityAttributes; dwCreationDisposition, dwFlagsAndAttributes: DWORD; hTemplateFile: THandle) : THandle;
begin
F1:=CreateFile('c:\1.txt',GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING, 0,0);
ShowMessage(IntToStr(GetLastError));
H:=LoadLibrary('kernel32.dll');
@CreatFile:= GetProcAddress(H,'CreateFileA');
F1:=CreatFile('c:\1.txt',GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING, 0,0);
ShowMessage(IntToStr(GetLastError));
FreeLibrary(H);
В первой 0, во второй ошибка 87...
dolphin705 вне форума Ответить с цитированием
Старый 03.01.2011, 16:42   #10
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Delphi какой версии?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Список функций .dll Johnson Общие вопросы Delphi 2 21.12.2010 17:10
Переадресация функций DLL Bad-XxX Общие вопросы Delphi 0 13.10.2010 01:11
Ошибка при выхове функций Bass.dll из другой DLL SalasAndriy Общие вопросы Delphi 7 21.10.2009 23:36
Несколько функций в DLL Alex Cones Общие вопросы Delphi 7 23.05.2009 22:36
Получение функций из DLL NITRON Общие вопросы Delphi 8 12.09.2007 17:32