Форум: "Начинающим";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];
ВнизИспользование 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.012 c