用Developer2000開發POS機程式常見問題的解決-2
以印表機為例,在FORM中可以用TEXT_IO來完成列印功能,程式如下:
PROCEDURE prn(linebuf varchar2) IS
BEGIN
declare
out_file text_io.file_type;
begin
out_file:=text_io.fopen('PRN','w');
text_io.putf(out_file,' %sn',linebuf);
text_io.fclose(out_file);
null;
end;
END;
注:需要先在Windows系統下新增相應的印表機驅動程式。
但有時印表機的驅動就是一個dll檔案,TEXT_IO就不適用了,需要用ORA_FFI來解決。以下是一個呼叫dll的例子:
PACKAGE my IS
FUNCTION print(comname in out varchar2,dispstr in out varchar2)
RETURN PLS_INTEGER;
function iniCOM(comname in out varchar2,BaudRates pls_integer,Parity pls_integer,BteSize pls_integer,StopBits pls_integer)
return pls_integer;
FUNCTION closecom(comname in out varchar2)
RETURN PLS_INTEGER;
END;
PACKAGE BODY my IS
my_lhandle ORA_FFI.LIBHANDLETYPE;
print_fhandle ORA_FFI.FUNCHANDLETYPE;
closecom_fhandle ORA_FFI.FUNCHANDLETYPE;
inicom_fhandle ora_ffi.funchandletype;
FUNCTION ff_print(fhandle ORA_FFI.FUNCHANDLETYPE,
comname in out varchar2,
dispstr in out varchar2)
RETURN PLS_INTEGER;
PRAGMA interface(C, ff_print, 11265);
FUNCTION print(comname in out varchar2,dispstr in out varchar2)
RETURN PLS_INTEGER IS
BEGIN
RETURN(ff_print(print_fhandle,comname,dispstr));
END;
FUNCTION ff_closecom(fhandle ORA_FFI.FUNCHANDLETYPE,comname in out varchar2)
RETURN PLS_INTEGER;
PRAGMA interface(C, ff_closecom, 11265);
FUNCTION closecom(comname in out varchar2)
RETURN PLS_INTEGER IS
BEGIN
RETURN(ff_closecom(closecom_fhandle,comname));
END;
FUNCTION ff_inicom(fhandle ORA_FFI.FUNCHANDLETYPE,
ComName in out varchar2,BaudRates pls_integer,Parity pls_integer,BteSize pls_integer,StopBits pls_integer)
RETURN PLS_INTEGER;
PRAGMA interface(C, ff_inicom, 11265);
FUNCTION inicom(
comname in out varchar2,BaudRates pls_integer,Parity pls_integer,BteSize pls_integer,StopBits pls_integer)
RETURN PLS_INTEGER IS
BEGIN
RETURN(ff_inicom(inicom_fhandle,ComName,BaudRates,Parity,BteSize,StopBits));
END;
BEGIN
my_lhandle := ORA_FFI.LOAD_LIBRARY('d:', 'Custlist.dll'); --列印驅動程式,具體的功能函式必須參考說明
print_fhandle := ORA_FFI.REGISTER_FUNCTION
(my_lhandle, 'writeCOM', ORA_FFI.PASCAL_STD);
inicom_fhandle := ORA_FFI.REGISTER_FUNCTION
(my_lhandle, 'iniCOM', ORA_FFI.PASCAL_STD);
closecom_fhandle := ORA_FFI.REGISTER_FUNCTION
(my_lhandle, 'CloseCOM', ORA_FFI.PASCAL_STD);
ora_ffi.register_parameter(print_fhandle,ora_ffi.c_char_ptr);
ora_ffi.register_parameter(print_fhandle,ora_ffi.c_char_ptr);
ora_ffi.register_return(print_fhandle,ora_ffi.c_int);
ora_ffi.register_parameter(closecom_fhandle,ora_ffi.c_char_ptr);
ora_ffi.register_return(closecom_fhandle,ora_ffi.c_int);
ora_ffi.register_parameter(inicom_fhandle,ora_ffi.c_char_ptr);
ora_ffi.register_parameter(inicom_fhandle,ora_ffi.c_int);
ora_ffi.register_parameter(inicom_fhandle,ora_ffi.c_int);
ora_ffi.register_parameter(inicom_fhandle,ora_ffi.c_int);
ora_ffi.register_parameter(inicom_fhandle,ora_ffi.c_int);
ora_ffi.register_return(inicom_fhandle,ora_ffi.c_int);
END;
PROCEDURE prn(linebuf varchar2) IS
BEGIN
declare
sl pls_integer;
str varchar2(200);
comname varchar2(200);
cl pls_integer;
BaudRates pls_integer;
Parity pls_integer;
BteSize pls_integer;
StopBits pls_integer;
begin
str:=linebuf;
comname:='COM4'; --COM口
BaudRates:=9600; --波特率
Parity:=0; --無奇偶校驗
BteSize:=8; --資料位
StopBits:=1; --停止位
cl:=my.inicom(comname,BaudRates,Parity,BteSize,StopBits); --初始化,其實初始化一次就行,不需要每次都初始化
sl:=my.print(comname,str); --列印輸出
end;
END;
錢箱、客顯都與印表機類似,只要有相對的dll。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18966/viewspace-780594/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用Developer2000開發POS機程式常見問題的解決-1Developer
- 用Developer2000開發POS機程式常見問題的解決-3Developer
- 快應用開發常見問題以及解決方案【持續更新】
- MFC開發常見問題的回答2 (轉)
- As常見問題解決方法
- git常見問題解決Git
- 常見問題及解決
- git 常見問題的解決方案Git
- 微信小程式中開發常見問題微信小程式
- 微信小程式開發常見問題(四)微信小程式
- 微信小程式開發常見問題(五)微信小程式
- 微信小程式開發常見問題(七)微信小程式
- DELPHI開發Web程式常見問題 (轉)Web
- 4 個常見的軟體安全開發問題及其解決方法
- JAVA常見開發問題Java
- Git常見問題及解決Git
- 常見問題及解決方案
- loadrunner常見問題解決
- Kafka常見的問題及解決方案Kafka
- keepalived 1.3.5常見配置以及常見問題解決
- 玩轉html2canvas以及常見問題解決HTMLCanvas
- Laravel 個人開發常見問題Laravel
- 近期BSN開發常見問題
- DDC/NFT開發常見問題
- Nacos 常見問題及解決方法
- UltraEdit常見問題及解決教程
- 解決常見介面跨域問題跨域
- WordPress:常見問題及解決方案
- Android應用安全常見問題及解決方案Android
- 開發微信小程式之HTTPS報錯常見問題彙總及解決方法微信小程式HTTP
- 常見的Checkpoint not complete問題分析解決
- JAVA常見中文問題的解決方案(轉)Java
- Ocfs2檔案系統常見問題解決方法
- Rational Functional Tester 測試 Web 應用程式中的常見問題及解決方案FunctionWeb
- 社交電商系統開發時的常見問題和解決方法
- 近期BSN開發常見問題答疑
- DDC開發常見問題答疑(二)
- Vue.js開發常見問題Vue.js