Вниз
Скачать: CL | DM;

Вызов функции из dll   Найти похожие ветки 

 
Hermit ©   (2002-01-19 16:33) [0]

Имеется библиотека реализующая режим фискального принтера для ЭККА Mini500.02 или Mini500.03. Одной из функций этой библиотеки есть функция Command:
Назначение: выполнение команд кассового аппарата, не передающих данные на компьютер.
Формат: Command(Ncom: integer; Vcom: integer; Komanda: pchar): boolean;
Где тип pchar – указатель на строку с нулевым символом в конце.

Параметры:Ncom - номер COM-порта (1 или 2);
Vcom - скорость для ЭККА (4800, 9600, 19200);
Komanda - команда ЭККА:

Вызываю комманду след. образом:
{$APPTYPE CONSOLE}
function Command(ncom: integer; vcom: integer; komanda: pchar): boolean; stdcall; external "Fisc500_03.dll";
begin
if not command(1, 4800""Карандаш"1*007P") then
Writeln("ECCA not respond.");
end.

И ничего на принтер не выводится :( Хотя, в демо. программе к dll (без исходников), если набрать такую же строку ("Карандаш"1*007P) все прекрасно работает. В чем может быть проблема?


 
paul_shmakov ©   (2002-01-20 02:13) [1]

а программа выдает "ECCA not respond."?
возможно у функции Command другое соглашение вызова - попробуйте убрать stdcall.

кстати, по опыту общения с подобными устройствами могу предположить, что выбранная Вами скорость передачи для устройства не подходит. попробуйте заменить.


 
Repeat Until   (2002-01-20 14:10) [2]

У большинства матричных принтеров для ККМ ставится скорость 9600. Скорее всего это отностится и ФР, т.к. их отличие от простых принтеров, скажем EPSON T300 заключается в основном в подключенной к нему ФП, но никак не в механике и электрике.


 
Hermit ©   (2002-01-21 10:57) [3]

Изменение скорости передачи никаких позитивных результатов не дала. Удивляет то, что в упомянутой мной демо-программе скорость выставляется в диалоговом режиме и комманда работает согласно прилагаемой докумментации :(
Кроме того, видно, что в результате выполнения комманды из моей тестовой программы на COM-порт что-то передается - на дисплее видно какое-то помигивание. Может быть дело в том, что устройство имеет свою кодовую таблицу символов? Тогда понятно, что в демо-программе строка приводится в соответствие этой кодовой таблице, а я этого не делаю.


 
paul_shmakov ©   (2002-01-22 00:58) [4]

кодовая таблица действительно может быть причиной. попробуйте так:

function Command(ncom: integer; vcom: integer; komanda: pchar): boolean; stdcall; external "Fisc500_03.dll";

var
Buffer: array[0..32] of Char;
begin
FillChar(Buffer, SizeOf(Buffer), 0);
StrLCopy(Buffer, ""Карандаш"1*007P", SizeOf(Buffer) - 1);
AnsiToOem(Buffer, Buffer);

if not command(1, 4800, Buffer) then
Writeln("ECCA not respond.");
end.


а убирание stdcall не помогло?



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.007 c
3-46231
Giga-Byte
2002-03-23 13:24
2002.04.15
Как можно отсортировать записи в Таблице


3-46277
Vip_Guest
2002-03-20 16:15
2002.04.15
Смена запроса SQL


1-46388
Xpyctuk
2002-03-26 11:58
2002.04.15
Кто-нибудь знает как работать с компонентой IdBase64Encoder


3-46276
Stranger
2002-03-25 16:01
2002.04.15
Хранение файлов различных типов в полях БД MS SQL Server


3-46284
VAleksey
2002-03-26 09:31
2002.04.15
Таблица FoxPro




   Наверх