超难问题,散分了,POS.dll调用问题!

wori 2011-11-28 01:23:34
佳博打印机 POS调用DLL问题,在delphi中死活调用不出来,求教!

代码如下:

function GPNetOpenEX(ipaddr:pchar;connecttime:integer;writetime:integer):Integer; stdcall; external 'GPNetio.dll';
function GPNetOpen(ipaddr:pansistring;connecttime:integer;writetime:integer):Boolean; stdcall; external 'GPNetio.dll';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
openPrn:boolean;
ipadd:string;
begin
ipadd:='192.168.0.230';
openprn:=GPNetOpen(pansistring(ipadd),3,3);
if openprn then
begin
showmessage('连接成功! ');
end
else
begin
showmessage('连接失败!');
end;
end;


改成PCHAR也不行!

函数原型如下:

int WINAPI GPNetOpenEX(LPCTSTR ipaddr,int connecttime,int writetime) 
 
/************************************************ 
**函数名称:GPNetOpenEX 
**功     能:连接打印设备。 
**参     数:LPCTSTR ipaddr,设备 IP地址 
int writetime,写超时,单位:秒 
int connecttime,连接超时  ,单位:秒    
**返  回  值:  返回大于或等于 0 的连接句柄(conn_num>=0),该值用于发送数据,或关闭连接, 
        一个进程最多可以同时打开 40个连接,可用于多线程同时 
        工作. 
             返回‐1 时连接失败。 



BOOL WINAPI GPNetOpen(LPCTSTR ipaddr,int connecttime,int writetime) 
/************************************************ 
**函数名称:GPNetOpen 
**功     能:连接打印设备。 
**参     数:LPCTSTR ipaddr,设备 IP地址 
int writetime,写超时,单位:秒 
int connecttime,连接超时  ,单位:秒    
**返  回  值:TRUE    成功; 
             FALSE   失败。 
*************************************************/ 
...全文
424 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyai001 2012-03-14
  • 打赏
  • 举报
回复
楼主,你看清楚了,他的DLL 是 WINAPI 不是 stdcall
在C++中,是绝对不一样的,不知道 VB 和 DP 是不是有区别。
zyai001 2012-03-14
  • 打赏
  • 举报
回复
各位兄弟姐妹,,我已经搞定了,不过,我是 VC++, ^_^, 我只研究了三个函数,其他参数不知道。
int i;
HINSTANCE hmod_gp = NULL;
typedef BOOL (WINAPI * FnGPNetOpen)(LPCTSTR a,int co_time,int wo_time);
typedef void (WINAPI * FnGPNetClose)();
typedef int (WINAPI * FnGPNetSend)(LPCTSTR a,int len);

FnGPNetOpen gpopen = NULL;
FnGPNetClose gpclose = NULL;
FnGPNetSend gpsend = NULL;

////////////////////////////////////////////////////////////
hmod_gp = ::LoadLibrary ("ZYPOS58EX.dll");
if (hmod_gp==NULL)
{
AfxMessageBox("外设动态链接库 ZYPOS58EX.DLL 加载失败!");
return;
}
gpopen = (FnGPNetOpen)GetProcAddress (hmod_gp,"GPNetOpen");
gpclose = (FnGPNetClose)GetProcAddress (hmod_gp,"GPNetClose");
gpsend = (FnGPNetSend)GetProcAddress (hmod_gp,"GPNetSend");
/////////////////////////////////////////////////////////////////////
if (!gpopen("192.168.0.99",60,30)) return;

for(i=0;i<20;i++)
gpsend("01234567890\n",12);

gpclose();

::FreeLibrary(hmod_gp);
gpopen=NULL;
gpclose=NULL;
gpsend=NULL;
谢幕人生 2011-12-03
  • 打赏
  • 举报
回复
delphi下调试能搞定。可以我们现在是在VB2008下调试,死都打不开连接。现在用TCP直接给它发送数据能打印的。晕死。
谢幕人生 2011-12-03
  • 打赏
  • 举报
回复
unit Unit1;  interface  uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls;  type   TForm1 = class(TForm)     Button1: TButton;     procedure Button1Click(Sender: TObject);   private     { Private declarations }   public     { Public declarations }   end;  var   Form1: TForm1;   con_num:integer; implementation {function GPNetOpenEX(ip:pchar;connecttimt:Integer;weitertime:Integer):integer; stdcall;   external 'GPNetio.dll' name 'GPNetOpenEX' ; function GPNetSendEX(char1:pchar;len:Integer;con_num:integer):boolean; stdcall;   external 'GPNetio.dll' name 'GPNetSendEX'; function GPNetCloseEX(con_num:integer):boolean; stdcall;   external 'GPNetio.dll' name 'GPNetCloseEX';   //} function GPNetOpen(ip:string;connecttimt:Integer;weitertime:Integer):boolean; stdcall;   external 'GPNetio.dll' name 'GPNetOpen' ; function GPNetSend(char1:pchar;len:Integer):boolean; stdcall;   external 'GPNetio.dll' name 'GPNetSend'; function GPNetClose():boolean; stdcall;   external 'GPNetio.dll' name 'GPNetClose';  //}    {$R *.dfm}  procedure TForm1.Button1Click(Sender: TObject); var   flag:boolean; begin   {con_num:=GPNetOpenEX('222.27.255.229',1,1) ;   if con_num>0 then     begin       GPNetSendEX('清拍黄瓜',8,con_num);       GPNetSendEX('盘  8.00',8,con_num);       GPNetCloseEX(con_num);      end;      //  }   flag:=GPNetOpen('222.27.255.229',10,10) ;   if flag then     begin   GPNetSend('清拍黄瓜',8);   GPNetSend('盘  8.00',8);   GPNetClose();    end;  // }  end;  end.
大肚肥肥 2011-12-01
  • 打赏
  • 举报
回复
GPNetOpen('192.168.0.230',3,3);
直接写IP,不转换一次试过了没?
myhaikuotiankong 2011-11-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
pansistring?试过pchar吗,开发商应该提供相关语言的demo吧
[/Quote]++
谢幕人生 2011-11-30
  • 打赏
  • 举报
回复
我公司也是用的这个品牌的.只丢给我们一个DLL一个说明书PDF说明.DEMO之类全没有.这点的确不如北洋...
wori 2011-11-28
  • 打赏
  • 举报
回复
试过pchar也不行,开发商没有例程
bdmh 2011-11-28
  • 打赏
  • 举报
回复
pansistring?试过pchar吗,开发商应该提供相关语言的demo吧
支持所有标准ESC/POS指令集打印机,北洋、佳博、商祺等 支持串口、并口、USB、网口 1.4是目前最新的公用版本了,其它后续版本都有厂家的标示 包含DLL文件,帮助,VB/VC/DELPHI例程 下边是POS_OPEN函数原型 HANDLE POS_Open(LPCTSTR lpName, int nComBaudrate, int nComDataBits, int nComStopBits, int nComParity, int nParam) 描述 打开端口。 参数 lpName [in] 指向以 null 结尾的打印机名称或端口名称。 当参数nParam的值为POS_COM_DTR_DSR、POS_COM_RTS_CTS、POS_COM_XON_XOFF或POS_COM_NO_HANDSHAKE 时, “COM1”,“COM2”,“COM3”,“COM4”等表示串口; 当参数nParam的值为POS_OPEN_PARALLEL_PORT时,“LPT1”,“LPT2”等表示并口; 当参数nParam的值为POS_OPEN_BYUSB_PORT时,“BYUSB-0”、“BYUSB-1”、“BYUSB-2”、“BYUSB-3”等表示USB端口。 当参数nParam的值为POS_OPEN_PRINTNAME时,表示打开指定的打印机。 当参数nParam的值为POS_OPEN_NETPORT时,表示打开指定的网络接口,如“192.168.10.251”表示网络接口IP地址,打印时参考“网络打印简介”。 nComBaudrate [in] 指定串口的波特率(bps)。 可以为以下值之一: 2400,4800,9600,19200,38400,57600,115200等。 具体的值与打印机的端口参数有关,不过最大不应超过256000。 nComDataBits [in] 指定串口通讯时的数据位数。 可以为 5 到 8。 具体的值与打印机的端口参数有关。 nComStopBits [in] 指定串口通讯时的数据停止位数。 可以为以下值之一: Flag Value Meaning POS_COM_ONESTOPBIT 0x00 停止位为1 POS_COM_ONE5STOPBITS 0x01 停止位为1.5 POS_COM_TWOSTOPBITS 0x02 停止位为2 nComParity [in] 指定串口的奇偶校验方法。 可以为以下值之一: Flag Value Meaning POS_COM_NOPARITY 0x00 无校验 POS_COM_ODDPARITY 0x01 奇校验 POS_COM_EVENPARITY 0x02 偶校验 POS_COM_MARKPARITY 0x03 标记校验 POS_COM_SPACEPARITY 0x04 空格校验 nParam [in] 指定串口的流控制(握手)方式、或表示通讯方式。请参考参数lpName的说明。 可以为以下值之一: Flag Value Meaning POS_COM_DTR_DSR 0x00 流控制为DTR/DST POS_COM_RTS_CTS 0x01 流控制为RTS/CTS POS_COM_XON_XOFF 0x02 流控制为XON/OFF POS_COM_NO_HANDSHAKE 0x03 无握手 POS_OPEN_PARALLEL_PORT 0x12 打开并口通讯端口 POS_OPEN_BYUSB_PORT 0x13 打开USB通讯端口 POS_OPEN_PRINTNAME 0X14 打开打印机驱动程序 POS_OPEN_NETPORT 0x15 打开网络接口 其中前两项也统称为硬件流控制,一般选用 RTS/CTS 方式。 返回值 如果函数调用成功,返回一个已打开的端口句柄。 如果函数调用失败,返回值为 INVALID_HANDLE_VALUE (-1)。 备注 1.如果打开的是并口(LPT1,LPT2等),那么后面的参数 nComBaudrate,nComDataBits,nComStopBits,nComParity将被忽略,可以设置为0,并且参数nParam必需指定为POS_OPEN_PARALLEL_PORT。同样,打开USB端口或打印机驱动程序,nParam必需指定为相应的参数修改。 2.如果由 lpName 指定的通讯端口被其他程序占用,那么返回值为 INVALID_HANDLE_VALUE。 3.如果参数出错,也返回INVALID_HANDLE_VALUE。 4.如果通讯端口已经打开,则会尝试关闭已经打开的端口,然后再去打开。 5.如果参数nParam指定打开USB端口,则需要安装随机附带的端口驱动程序,并把打印机配置为支持USB端口模式。 6.另请参考 POS_Close,POS_Reset。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧