Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Delphi 7. Как добавить созданные мною новые фунцкии и типы данных в uses?  (Прочитано 9064 раз)
0 Пользователей и 6 Гостей смотрят эту тему.
Fatal_Error
Участник

ru
Offline Offline
Пол: Мужской

« : 14-07-2010 05:47 » 

Здравствуйте!
Сразу хочу предупредить что возможно название темы может не соответствовать задаче которую я хочу решить=)
И так к делу
Я преобрёл один SDK пакет для работы и разработки программного обеспечения для одного замечательного девайся, а именно считывателя бесконтакных карт.
Производители мне прислали два файда с расширением *.PAS в которых описанны типы данных и функции и DLL файл который я так понимаю уже содержит в готовом виде эти функции, а также FAQ с описанеи для чего их можно применять.
Вот что написанно в этих файликах:
uZ2uImport.pas
Код:
unit uz2uImport;

interface

uses
  uz2uTypes;

function z2uGetVersion(): Cardinal; stdcall;

// Поиск считывателей

function z2uFindFirstReaderA(APort: PAnsiChar; ARdType: Tz2uReaderType;
                            var VInfo: Tz2uFindReaderInfoA):THANDLE; stdcall;
function z2uFindFirstReaderW(APort: PWideChar; ARdType: Tz2uReaderType;
                            var VInfo: Tz2uFindReaderInfoW):THANDLE; stdcall;
function z2uFindNextReaderA(AFind: THANDLE;
                            var VInfo: Tz2uFindReaderInfoA): Boolean; stdcall;
function z2uFindNextReaderW(AFind: THANDLE;
                            var VInfo: Tz2uFindReaderInfoW): Boolean; stdcall;
function z2uCloseFindReader(AFind: THANDLE): Boolean; stdcall;

и файл uZ2uTypes.pas
Код:
unit uZ2uTypes;

interface

{$A-} // packed types

Const
  z2uMAXCOMNAME    = 16;
  z2uMAXMANUFACTOR = 250;

Const
  z2uerrSUCCESS         = 0;  // Операция выполнена успешно
  z2uerrUNKNOWN         = 1;  // Незвестная ошибка
  z2uerrINVPARAM        = 2;  // Неверные параметры
  z2uerrRDNOTFOUND      = 3;  // Считыватель не найден
  z2uerrCARDNOTFOUND    = 4;  // Карта не найдена
  z2uerrRDACCESS        = 5;  // Нет доступа к считывателю
  z2uerrCARDACCESS      = 6;  // Нет доступа к карте
  z2uerrPAGELOCK        = 7;  // Страница заблокирована
  z2uerrNOMOREITEMS     = 8;  // Нет больше элементов (для поиска)

Я так понял что эти два файла это просто исходники этой библиотеки, которые по сути прикручивать некуда и ненадо. Нужно прикрутить ихнию DLL к моей программе и функции описанные в ней станут доступны для использования. Теперь вопрос как мне прикрутить эту DLL к программе???

В прилагающемся FAQ я нашёл пример кода:

Код:
program FindReadersSample;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  uz2uImport, uz2uTypes;

var
  hFind: THANDLE;
  Info: Tz2uFindReaderInfoA;

begin

Что в разделе USES идёт обращение к этим файлам. Так же мне непонятно следующее: чтобы указать их в USES мне получается просто нужно положить эти *.PAS в каталог с моими исходниками, указать их в USES, далее в коде моей программы применять эти функции, после компеляции моей программы , я получается просто кладу эту DLL рядом со своим EXE файлом ? так чтоли?
Помогите пожалуйста в голове каша просто Не понял
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 14-07-2010 06:56 » new

Это не исходники библиотеки, а только заголовочные файлы. Насчет Uses не подскажу, но коли так показано в примере, то логично будет положить эти файлы рядом. Т.е. правильно думаешь.

Только что-то я не вижу определение типа для Tz2uFindReaderInfoA. Файлы ты не целиком привел?

С DLL понимаешь правильно - достаточно положить рядом с EXE. Об порядке поиска DLL можешь почитать в MSDN.
« Последнее редактирование: 14-07-2010 06:58 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Fatal_Error
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 14-07-2010 07:29 » 

Цитата
Только что-то я не вижу определение типа для Tz2uFindReaderInfoA. Файлы ты не целиком привел?
да тока часть.
Всё получилось:
1. пложил заголовочные файлы в папку с будущим проектом, тудаже скопировал ДЛЛ файл
2. Сослался в USES на эти файлы как показанно в примере, я так понял это нужно для компиляции и чтобы дальше было удобно программировать, ну там подсветка кода, автоматическое дописывание имён функции и свойств т.п.
Удалось привезать пару примеров работы с этим девайсом к проекту, уже считал коды нескольких карт=), разбираюсь в тонкостях.
Видать я просто запаниковал Не надо от кучи неизвестного мне до сели кода, но сходив на перекур и попив чаю, всё оказалось на много проще Класс!
Спасибо!
Записан
zubr
Гость
« Ответ #3 : 14-07-2010 08:13 » 

Подключая вышеуказанные заголовочные модули в блок uses программы, ты указываешь компилятору, что нужно добавить в таблицу импорта программы функции, перечисленные в заголовочном модуле. Программа, же когда ее юзер запустил, пытается загрузить нужные функции из таблицы импорта. И если она (программа) не находит нужной функции в dll по возможным путям поиска, то выдает соответствующую ошибку.
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #4 : 18-07-2010 12:14 » 

а какие карты? чипованные, или майфер?

upd. а, всё, увидел - бесконтактные, т.е., видимо, майфер Улыбаюсь
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines