![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вызов функции из dll
Hermit © (2002-01-19 16:33:00)Имеется библиотека реализующая режим фискального принтера для ЭККА 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-22 00:58:00) [1]кодовая таблица действительно может быть причиной. попробуйте так:
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 не помогло?
Hermit (2002-01-21 10:57:00) [2]Изменение скорости передачи никаких позитивных результатов не дала. Удивляет то, что в упомянутой мной демо-программе скорость выставляется в диалоговом режиме и комманда работает согласно прилагаемой докумментации :(
Кроме того, видно, что в результате выполнения комманды из моей тестовой программы на COM-порт что-то передается - на дисплее видно какое-то помигивание. Может быть дело в том, что устройство имеет свою кодовую таблицу символов? Тогда понятно, что в демо-программе строка приводится в соответствие этой кодовой таблице, а я этого не делаю.
Repeat Until (2002-01-20 14:10:00) [3]У большинства матричных принтеров для ККМ ставится скорость 9600. Скорее всего это отностится и ФР, т.к. их отличие от простых принтеров, скажем EPSON T300 заключается в основном в подключенной к нему ФП, но никак не в механике и электрике.
paul_shmakov (2002-01-20 02:13:00) [4]а программа выдает "ECCA not respond."?
возможно у функции Command другое соглашение вызова - попробуйте убрать stdcall.
кстати, по опыту общения с подобными устройствами могу предположить, что выбранная Вами скорость передачи для устройства не подходит. попробуйте заменить.