还是pb12调用dll的外部函数有关问题,有完美解决方案吗

还是pb12调用dll的外部函数问题,有完美解决方案吗
有医保接口的程序原来是pb9的程序需升级到pb12,
升级过程中有调用医保提供的dll的外部函数,其中一个为9.0声明方法
function integer Ylbx_MsgBegin(string MessageName) LIBRARY "ylbx_interface.dll"  
以前类似的处理方法
一是加 alias for "Ylbx_MsgBegin;Ansi"
 二是把string类型的参数用blob代替

function integer Ylbx_MsgBegin(blob MessageName) LIBRARY "ylbx_interface.dll" //alias for "Ylbx_MsgBegin;Ansi" //函数体调用开始

blob MessageName
string xmz
xmz="uf_retrieve_ybyp"
MessageName=blob(xmz,EncodingANSI!)
ylbx_msgbegin(MessageName)//调用函数名

上面的外部函数的含义就是传递一个指令名称,当用9.0声明方法
会提示

不存在这个接口函数uf_retrieve_ybyp4K(这个4K实际是乱码字符,复制粘贴后显示为4K)
不存在这个接口函数u
显然在字符转换或识别上出现问题,据说可以用byte类型代替string解决,
谁用过可以吗?给个例子看看,谢谢

------解决方案--------------------
你试过申明为alias for "Ylbx_MsgBegin;Ansi"不能解决问题吗?

------解决方案--------------------
pb12与pb9的字符编码不同,应该加上Ansi就可以了

试试以下代码
function integer Ylbx_MsgBegin(string MessageName) LIBRARY "ylbx_interface.dll" alias for "Ylbx_MsgBegin;Ansi"  
------解决方案--------------------
我今天在做pb11.5的研究时也被这个问题困扰了,希望且高手可以解决
------解决方案--------------------
顺便加个问题,调用的外部dll文件应该放在哪个目录下??
------解决方案--------------------
byte  aaa[]={65,66} //byte参数 "AB"
string ls_text
ls_text=string(blob(aaa[]),encodingansi!) //返回对应编码的字符串 "AB"
------解决方案--------------------
引用:
byte  aaa[]={65,66} //byte参数 "AB"
string ls_text
ls_text=string(blob(aaa[]),encodingansi!) //返回对应编码的字符串 "AB"

这是byte[]方式,一般blob也可以
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

byte  aaa[]={65,66} //byte参数 "AB"
string ls_text
ls_text=string(blob(aaa[]),encodingansi!) //返回对应编码的字符串 "AB"

这是byte[]方式,一般blob也可以

要是汉字参数呢?怎么赋值到byte?是不是就不支持了?


如果是汉字,这种方式就不行了
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

byte  aaa[]={65,66} //byte参数 "AB"
string ls_text
ls_text=string(blob(aaa[]),encodingansi!) //返回对应编码的字符串 "AB"

这是byte[]方式,一般blob也可以

要是汉字参数呢?怎么赋值到byte?是不是就不支持了?


如果是汉字,这种方式就不行了


汉字也可以,如下:
byte  aaa[]={asc('~hC4'),asc('~hE3'),asc('~hBA'),asc('~hC3')} //byte参数 C4 E3 BA C3 
string ls_text
ls_text=string(blob(aaa[]),encodingansi!) //返回对应编码的字符串
messagebox('',ls_text) //你好
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

byte  aaa[]={65,66} //byte参数 "AB"
string ls_text
ls_text=string(blob(aaa[]),encodingansi!) //返回对应编码的字符串 "AB"

这是byte[]方式,一般blob也可以

要是汉字参数呢?怎么赋值到byte?是不是就不支持了?

汉字赋值:
blob lb_temp
byte lbyte_result[]
lb_temp=blob('你好',EncodingANSI!)
lbyte_result[]=GetByteArray ( lb_temp ) //byte数组{asc('~hC4'),asc('~hE3'),asc('~hBA'),asc('~hC3')}