Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.02.2012, 22:33
Сергей Викторович Сергей Викторович вне форума
Прохожий
 
Регистрация: 29.02.2012
Сообщения: 14
Репутация: 10
По умолчанию Как увидеть результат выполнения функции

Подскажите пожалуйста как увидеть результат выполнения функции 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  
Старый 29.02.2012, 22:40
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Сергей Викторович
Функция должна давать количество подключенных устройств, а нечего не отображается
Ключевое слово функция, а куда записывается результат её выполнение? Пока в коде только её исполнение:
Код:
    if Assigned(@MyFunc) then
     MyFunc()
возвращаемый результат ничему не присвоен и соответственно не используется.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 29.02.2012, 22:43
Сергей Викторович Сергей Викторович вне форума
Прохожий
 
Регистрация: 29.02.2012
Сообщения: 14
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Ключевое слово функция, а куда записывается результат её выполнение? Пока в коде только её исполнение:
Код:
    if Assigned(@MyFunc) then
     MyFunc()
возвращаемый результат ничему не присвоен и соответственно не используется.

а как присвоить? подскажите
Ответить с цитированием
  #4  
Старый 29.02.2012, 22:48
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Я не знаю, что и как она возвращает, но к примеру так:
Код:
    if Assigned(@MyFunc) then
     Label1.Caption := MyFunc()
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 29.02.2012, 23:12
Сергей Викторович Сергей Викторович вне форума
Прохожий
 
Регистрация: 29.02.2012
Сообщения: 14
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Я не знаю, что и как она возвращает, но к примеру так:
Код:
    if Assigned(@MyFunc) then
     Label1.Caption := MyFunc()

на else программы останавливается и пишет ошибку.
Функция должна показывать количество подключенных приборов.
Ответить с цитированием
  #6  
Старый 29.02.2012, 23:23
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Функция никому и ничего не должна, вы должны правильно её использовать. Как она деларирована? К тому же вы её определили как procedure. И еще раз она находится в DLL, то скорее всего должно быть так:
Код:
type
  TMyFunc = function : что то возвращаем; stdcall;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #7  
Старый 29.02.2012, 23:25
nixel nixel вне форума
Начинающий
 
Регистрация: 12.12.2011
Адрес: Москва
Сообщения: 150
Версия Delphi: XE2-U4
Репутация: 131
По умолчанию

Цитата:
TMyFunc = procedure;

судя по объявлению, это не функция, а процедура. у процедуры как такового значения нет и присвоить его ничему нельзя.
соответственно либо ошибка в объявлении (нужно объявить как функцию), либо проблемы с самим вызовом (например недостаточно параметров, etc...).

В идеале, конечно, вообще заглянуть в исходники dll, но как я понял, у вас их нет)
Ответить с цитированием
  #8  
Старый 29.02.2012, 23:25
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Тогда нужно пробовать разные варианты:
Код:
Label1.Caption := IntToStr(MyFunc());
или
Label1.Caption := FloatToStr(MyFunc());//хм
или
    if Assigned(@MyFunc) then
     begin
      MyFunc(w);
      Label1.Caption:=IntTostr(w);
     end else...
Может есть хоть описание для ДЛЛ, проект (его идея) откуда-то взялся.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:23.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025