API调用

zb63668331 2011-01-07 12:02:42

//API 原型
int GetPeopleName(char *strTmp, int *strLen)

//PB10.5中 我声明和调用的情况
public function integer GetPeopleName(ref string strTmp,ref integer strLen) library "termb.dll"

ls_name =''
li_name = 30
GetPeopleName(ls_name,li_name)
sle_name.text = ls_name

//下面是C#里调用情况,测试通过
[DllImport("termb.dll", EntryPoint = "GetPeopleName", CharSet = CharSet.Ansi, SetLastError = false)]
public static extern unsafe int GetPeopleName(ref byte strTmp, ref int strLen);// 声明

byte[] name = new byte[30];
int length = 30;
GetPeopleName(ref name[0], ref length);
lblName.Text = System.Text.Encoding.GetEncoding("GB2312").GetString(name);


//现在 我在PB里调用出现的情况是,sle_name.text 出现的是乱码,我不知道声明的数据类型对不对,还请各位指点
...全文
99 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zb63668331 2011-01-07
  • 打赏
  • 举报
回复
ls_name = space(30)
对的,晕倒,我以为是给空值呢!
wag_enu 2011-01-07
  • 打赏
  • 举报
回复
还是不对。。。。

char lc_name[]
li_name = 30
GetPeopleName(lc_name,li_name)
sle_name.text = lc_name
wag_enu 2011-01-07
  • 打赏
  • 举报
回复
或者:
char lc_name[]
li_name = 30
GetPeopleName(lc_name,li_name)
sle_name.text = ls_name
wag_enu 2011-01-07
  • 打赏
  • 举报
回复
试一下:
ls_name = space(30)
li_name = 30
GetPeopleName(ls_name,li_name)
sle_name.text = ls_name

或者:
char lc_name[]
li_name = 30
GetPeopleName(ls_name,li_name)
sle_name.text = ls_name
zb63668331 2011-01-07
  • 打赏
  • 举报
回复
public function integer GetPeopleName(ref string strTmp,ref integer strLen) library "termb.dll" alias for "GetPeopleName;Ansi"


调试状态下是可以的,run 或者编译后都不行
xuam 2011-01-07
  • 打赏
  • 举报
回复
怎么加的?肯定要加的!
[Quote=引用 3 楼 zb63668331 的回复:]
加上去,连PB程序都会挂掉...晕倒
[/Quote]
zb63668331 2011-01-07
  • 打赏
  • 举报
回复
加上去,连PB程序都会挂掉...晕倒
pcwe2002 2011-01-07
  • 打赏
  • 举报
回复
如果用PB10以上含PB10,申明外部函数时需要再申明后加上;ansi
zb63668331 2011-01-07
  • 打赏
  • 举报
回复
参数:
*strTmp 返回的信息缓存指针。
*strLen 返回的信息长度指针。
返 回 值:
返回值 意义
1 正确
0 错误

返回值 是 1,但是乱码

680

社区成员

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

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