Есть библиотека подключения к фискальному регистратору unisystem мини-фп54.
Пробую подключиться к функции t400me. Через GetProcedureAddress возвращается nil, а через ActiveX вообще access viloation
- Код: Выделить всё
unit kkm;
{$mode objfpc}{$H+}
interface
uses Classes, SysUtils, Dialogs, dynlibs, LConvEncoding, activexcontainer;
type
TUniSystem = class(TObject)
procedure Exec;
end;
TMyFunc = function(var Param1: WideString): String; stdcall;
implementation
procedure TUniSystem.Exec;
var
kkmLib: TLibHandle;
MyFunc: TMyFunc;
P: Pointer;
AC: TActiveXContainer;
k: variant;
begin
// попытка подключения через ActiveX
AC := TActiveXContainer.Create(nil);
AC.OleClassName := 'It400';
k := AC.ComServer;
ShowMessage(k.t400me('open_port;1;9600')); // тут вылетает access violation
// попытка загрузить dll и вызвать функцию через GetProcedureAddress
kkmLib := LoadLibrary('ecrT400.' + SharedSuffix);
if kkmLib = 0 then Exit;
P := GetProcedureAddress(kkmLib, 'It400::t400me');
if P = nil then ShowMessage('P = nil'); // P == nil :(
MyFunc := TMyFunc(P);
if MyFunc = nil then ShowMessage('func = nil');
end;
end.
Что я делаю не так?
В Интернете есть рабочий пример для 1С.
- Код: Выделить всё
Соединение = Новый COMОбъект("ecrmini.t400");
Удачно = Соединение.t400me("open_port;"+Строка(Номер)+";115200;");
Если Не Удачно Тогда...
Во вложении я добавил скриншот программы, которая показала все экспортируемые функции.