<skip>
// Открыть COM порт для обмена
HFelix frfInitTransport(const char* PortName, const char* Password, int SPEED);
// SPEED = 0 - скорость 9600 бод
// SPEED = 1 - скорость 19200 бод
// Закрыть COM порт
int frfDoneTransport(HFelix H);
<skip>
Использование сторонних DLL-лок
Есть:
Felix.dll драйвер
Felix.h интерфейс для С, С++
FelixDRV.pas интерфейс для Delphi
файл - Felix.h
Код:
файл - FelixDRV.pas
Код:
<skip>
unit FelixDrv;
{ Borland Delphi (5.0) unit for FelixF-R cash register.
API for felix.dll driver.
}
interface
type HFelix = Cardinal;
frfFelixStatus = packed record
ErrorCode: shortint;
HardStatus: byte;
CurrentStatus: word;
PrinterStatus: byte;
end;
{$EXTERNALSYM frfInitTransport}
function frfInitTransport(PortName, CommunicationPassword: PAnsiChar; SPEED: integer): HFelix; stdcall;
{$EXTERNALSYM frfDoneTransport}
function frfDoneTransport(Handle: HFelix): HRESULT; stdcall;
<skip>
implementation
const FiscalDrv = 'Felix.dll';
function frfInitTransport; external FiscalDrv name 'frfInitTransport';
function frfDoneTransport; external FiscalDrv name 'frfDoneTransport';
function frfNewCicle; external FiscalDrv name 'frfNewCicle';
<skip>
unit FelixDrv;
{ Borland Delphi (5.0) unit for FelixF-R cash register.
API for felix.dll driver.
}
interface
type HFelix = Cardinal;
frfFelixStatus = packed record
ErrorCode: shortint;
HardStatus: byte;
CurrentStatus: word;
PrinterStatus: byte;
end;
{$EXTERNALSYM frfInitTransport}
function frfInitTransport(PortName, CommunicationPassword: PAnsiChar; SPEED: integer): HFelix; stdcall;
{$EXTERNALSYM frfDoneTransport}
function frfDoneTransport(Handle: HFelix): HRESULT; stdcall;
<skip>
implementation
const FiscalDrv = 'Felix.dll';
function frfInitTransport; external FiscalDrv name 'frfInitTransport';
function frfDoneTransport; external FiscalDrv name 'frfDoneTransport';
function frfNewCicle; external FiscalDrv name 'frfNewCicle';
<skip>
Что мне сделать, чтобы я мог пользоваться этой ddl-кой. Точнее вызывать функции из неё.
Где можно почитать подробно как это делает, а то я что-то не смог понять что я нет так делаю.
в книжке Программирование в С++Builder 5.0 А.Я. Архангельского написано следующее:
Если функция MyFunc(), то надо:
Объявить указатель на эту функцию. Например:
Код:
void (__stdcall *MyFunc) (HWIND)
Тогда операции с библиотекой могут строиться по следующей схеме:
Код:
// загрузка dll
HINSTANCE dllInstance = LoadLibrary ("mydll.dll");
// получение адреса функции
MyFunc = (void (__stdcall*) (HWIND)
GetProcAddress (dllInstance, "_MyFunc");
// вызов функции
MyFunc(Appliaction->Handle);
// выгрузка dll
FreeLibrary(dllInstance);
HINSTANCE dllInstance = LoadLibrary ("mydll.dll");
// получение адреса функции
MyFunc = (void (__stdcall*) (HWIND)
GetProcAddress (dllInstance, "_MyFunc");
// вызов функции
MyFunc(Appliaction->Handle);
// выгрузка dll
FreeLibrary(dllInstance);
1 Где объявляется этот указатель ???
Код:
void (__stdcall *MyFunc) (HWIND)
2 Где описывается "получение адреса функции" уже есть ошибка, т.к. нехватает скобки одной.
надо ли скобка пере "void"
// получение адреса функции
Код:
MyFunc = (void (__stdcall*) (HWIND)
GetProcAddress (dllInstance, "_MyFunc");
GetProcAddress (dllInstance, "_MyFunc");
Плиз хелп. Правильно ли это описано в книге ?