超难问题,散分了,POS.dll调用问题!
佳博打印机 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?? 失败。?
*************************************************/?
[解决办法]
各位兄弟姐妹,,我已经搞定了,不过,我是 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;