用delphi写一个程序,调用一个dlldll函数说明function GETWLSLH(P_XML,P_BZ:PChar):PChar;stdcall;export;
过程名: GETWLSLH
参数: P_XML,P_BZ:PChar P_xml:传入的XML,P_BZ:UP:开具发票,ZF:作废发票
作用: 发送XML到服务器
返回值: PChar:若正常则返回网络发票受理号,若有错误或异常则返回具体错误信息,以Err:开头 例如 Err: 传入值不得为空!
过程名: GETWLSLH
参数: P_XML,P_BZ:PChar P_xml:传入的XML,P_BZ:UP:开具发票,ZF:作废发票
作用: 发送XML到服务器
返回值: PChar:若正常则返回网络发票受理号,若有错误或异常则返回具体错误信息,以Err:开头 例如 Err: 传入值不得为空!
H: THandle; //返回的DLL的句柄
dllfrm: pchar; //DLL函数返回值
p: function (P_XML, P_BZ:PChar):PChar;stdcall;
i:Integer;
begin
H := LoadLibrary('****.dll');
if H <> 0 then
@p := GetProcAddress(H, PChar('GETWLSLH'));
if Assigned(p) then
dllfrm := p('11', '22');
FreeLibrary(H);
end;
//先声明一下,就可以直接调用了!
function GETWLSLH(P_XML,P_BZ:PChar):PChar;stdcall;external '*.dll';
最讨厌这类返回PChar的函数,这类函数如果在动态库内分配内存,到哪去释放内存,如果不是共享内存管理器就会报错。建议如果大家都是DELPHI写的,就加上ShareMem,然后返回string,如果DLL是别的语言编写,则用参数返回,在外面先申请足够大的内存,函数只管使用赋值(Windows作法)。