![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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() |
|
#3
|
|||
|
|||
|
Цитата:
а как присвоить? подскажите |
|
#4
|
||||
|
||||
|
Я не знаю, что и как она возвращает, но к примеру так:
Код:
if Assigned(@MyFunc) then
Label1.Caption := MyFunc() |
|
#5
|
|||
|
|||
|
Цитата:
на else программы останавливается и пишет ошибку. Функция должна показывать количество подключенных приборов. |
|
#6
|
||||
|
||||
|
Функция никому и ничего не должна, вы должны правильно её использовать. Как она деларирована? К тому же вы её определили как procedure. И еще раз она находится в DLL, то скорее всего должно быть так:
Код:
type TMyFunc = function : что то возвращаем; stdcall; |
|
#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... |