超难问题,散分了,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   失败。 
*************************************************/ 
...全文
431 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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吧

1,183

社区成员

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

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