Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.28;
Скачать: CL | DM;

Вниз

Использование DLL   Найти похожие ветки 

 
HBZ ©   (2006-05-09 18:35) [0]

Здравствуйте!
У меня есть DLL написанная на С-билдере и я пытаюсь к ней обратиться, но столкнулся с проблемой. Вот мой код:
unit test;

interface

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

type
 DWORD = Longword;
 TSome_func = function(p1: DWORD; p2:Pointer; var p3: Pointer) :DWORD; cdecl;

 TForm1 = class(TForm)
   msg: TLabel;
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;
var
 Form1: TForm1;
 LibHandle: HModule;
 Some_Func : TSome_Func;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

LibHandle := LoadLibrary("my.dll");
if (LibHandle<>0) then begin
 @Some_Func := GetProcAddress(LibHandle, "Some_Func");
 if (@Some_Func <> nil) then msg.Caption := "OK"
                             else msg.Caption := "Error";
end;

Эту библиотеку писал не я, но я знаю (судя по прилагающемуся хелпу), что там должна быть функция Some_Func, объявленная следующим образом:

extern "C" DWORD Some_Func(
DWORD  p1;
void *p2;
void *p3)


где DWORD
typedef unsigned long DWORD

Так вот: при запуске программы значение поля Caption метки msg становится равным Error, из чего я делаю вывод, что библиотека загружается нормально, но нужная мне функция не найдена. Вопрос: эта моя ошибка в коде или этой функции просто нет в библиотеке? Можно ли как-нить посмотреть внутренности этой длл?


 
KilkennyCat ©   (2006-05-09 18:38) [1]


> Можно ли как-нить посмотреть внутренности этой длл?


F3


 
Шпиён   (2006-05-09 18:46) [2]

TDump


 
KilkennyCat ©   (2006-05-09 18:47) [3]


>  [2] Шпиён   (09.05.06 18:46)


По F3 быстрее. По крайней мере, для
> или этой функции просто нет в библиотеке?


 
icWasya ©   (2006-05-10 09:51) [4]

и в догонку - а правильно ли объявлен прототип функции

extern "C" DWORD Some_Func(DWORD  p1;void *p2;void *p3);
это
function(p1: DWORD; p2:Pointer; p3: Pointer) :DWORD; cdecl
а не
function(p1: DWORD; p2:Pointer; var p3: Pointer) :DWORD; cdecl


 
palva ©   (2006-05-10 10:31) [5]

Прототип объявлен правильно. Но с именем функции могут быть проблемы. Надо точно знать, какое имя экспортирует DLL. Возможно, в паскале перед именем функции придется добавить подчеркивание. Как уже советовали, можно сделать tdump или посмотреть в блокноте саму dll.



Страницы: 1 вся ветка

Текущий архив: 2006.05.28;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.038 c
4-1141717138
Chaser
2006-03-07 10:38
2006.05.28
Наличие полосы прокрутки в ListView


4-1141976764
V-A-V
2006-03-10 10:46
2006.05.28
Работа с реестром без админских прав


15-1146516340
ArtemESC
2006-05-02 00:45
2006.05.28
Крекеры бессильны!


2-1147203397
КИРПИЧ
2006-05-09 23:36
2006.05.28
ПОМОГИТЕ ПОЖАЛСТА


15-1146330901
dyd
2006-04-29 21:15
2006.05.28
Бесплатный хостинг