![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Подскажите пожалуйста как увидеть результат выполнения функции MyFunc()
Вот полный текст рабочей программы программы. Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; Label2: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); type TMyFunc = procedure; var DLLInstance : THandle; MyFunc : TMyFunc; w: integer ; begin DLLInstance := LoadLibrary(PChar('mdaq12.dll')); if (DLLInstance = 0) then begin MessageDlg('Невозможно загрузить DLL', mtError, [mbOK], 0); Exit; end; try @MyFunc := GetProcAddress(DLLInstance, '_GetUsbDeviceCount@0'); if Assigned(@MyFunc) then MyFunc() else MessageDlg('Не найдена искомая процедура.', mtError, [mbOK], 0); finally FreeLibrary(DLLInstance); end; end; end. Функция должна давать количество подключенных устройств, а нечего не отображается Последний раз редактировалось Admin, 29.02.2012 в 22:36. |
#2
|
||||
|
||||
![]() Цитата:
Код:
if Assigned(@MyFunc) then MyFunc() Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#3
|
|||
|
|||
![]() Цитата:
а как присвоить? подскажите |
#4
|
||||
|
||||
![]() Я не знаю, что и как она возвращает, но к примеру так:
Код:
if Assigned(@MyFunc) then Label1.Caption := MyFunc() Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#5
|
|||
|
|||
![]() Цитата:
на else программы останавливается и пишет ошибку. Функция должна показывать количество подключенных приборов. |
#6
|
||||
|
||||
![]() Функция никому и ничего не должна, вы должны правильно её использовать. Как она деларирована? К тому же вы её определили как procedure. И еще раз она находится в DLL, то скорее всего должно быть так:
Код:
type TMyFunc = function : что то возвращаем; stdcall; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#7
|
|||
|
|||
![]() Цитата:
судя по объявлению, это не функция, а процедура. у процедуры как такового значения нет и присвоить его ничему нельзя. соответственно либо ошибка в объявлении (нужно объявить как функцию), либо проблемы с самим вызовом (например недостаточно параметров, etc...). В идеале, конечно, вообще заглянуть в исходники dll, но как я понял, у вас их нет) |
#8
|
||||
|
||||
![]() Тогда нужно пробовать разные варианты:
Код:
Label1.Caption := IntToStr(MyFunc()); или Label1.Caption := FloatToStr(MyFunc());//хм или if Assigned(@MyFunc) then begin MyFunc(w); Label1.Caption:=IntTostr(w); end else... |