在线求9!!!如何在PB中调用Delphi编写的Dll

ptzzg 2004-08-28 05:46:14
Delphi编译的Dll中声明函数如下:
function ShowForm(PDept: PChar): boolean; stdcall;

在PB9.0中声明:

FUNCTION boolean ShowForm(ref String PDept) LIBRARY "project1.dll"

调用时出现:
PowerBuilder Application Execution Error(R0021)
Applicaton terminated.
Error:Bad runtime function reference at line 1 in clicked event fo object cb_1 of main

请问:这是个什么错误。我该如何调用这个函数(在Delphi中调用正常)
...全文
340 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
liushiboy 2004-11-18
  • 打赏
  • 举报
回复
你的DLL放的路径不对,请放至 winnt/system32下面
然后,传入传出的字符串用pchar类型 函数调用类型为stdcall;
劣势 2004-11-18
  • 打赏
  • 举报
回复
这个是PB问题,偶也写过很多DLL给PB开发人员使用过,对PChar的使用是有个技术问题的
是不是要分配好ref string的空间,我不会pb但是听了PB开发人员的介绍好像有这么一条的
lovefox_zoe 2004-11-18
  • 打赏
  • 举报
回复
哦。那如果要vb或者vc和delphi共用一个dll,该注意哪些呢?
halfdream 2004-11-18
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/3562/3562465.xml?temp=.5052912

刚回的一个相关贴子..
ksaiy 2004-10-31
  • 打赏
  • 举报
回复
这个问题我只有在类型是String型的时候遇到。

PB偶不会用。但是写过DLL给PB用。直接就是PChar。没有问题。

在Delphi中的PChar等价于C或者是C++里的Char*,不知道在PB中是怎么定义的?

还有在PB中String的长度是多少?你看一下。然后用对应的类型来进行调用吧。

jb99334 2004-10-31
  • 打赏
  • 举报
回复
在DELPHI的DLL里:
function dosomething(out s:shortstring) :dword ;stdcall;
var
len : integer;
begin
/*对S赋值*/
...
/*获取S的长度*/
len := length(s);
/*从第2个字节将S 前移一位*/
move(s[1],s[0],len);
/*将S 变成null-terminate的字符串*/
s[len] := #0;
result := 1;
end;
参考http://www.china-askpro.com/msg44/qa41.shtml
liushiboy 2004-10-30
  • 打赏
  • 举报
回复
偶也遇上相同的问题.
一个函数传入pchar得到pchar..stdcall

PB中调用时,有时候要出错,有时候不出错,
在某些特定的函数之后就要出错,怀疑PB中的string类型跟pchar不完全兼容!
ptzzg 2004-09-01
  • 打赏
  • 举报
回复
没人会吗???
ptzzg 2004-08-30
  • 打赏
  • 举报
回复
不行啊。请高手指点。
blazingfire 2004-08-29
  • 打赏
  • 举报
回复
应该是这样才对吧
FUNCTION boolean ShowForm(Char PDept[256]) LIBRARY "project1.dll"
blazingfire 2004-08-29
  • 打赏
  • 举报
回复
改D中的函数接口用数组吧
type
ChrArray = array[0..255] of Char
function ShowForm(PDept: ChrArray): boolean; stdcall;
再改PB中的接口调用,也用0..255的Char数组试试PB我不懂大概应该这样吧:
FUNCTION boolean ShowForm(ref Char PDept[256]) LIBRARY "project1.dll"
wilowind 2004-08-29
  • 打赏
  • 举报
回复
up
yjs_lh 2004-08-29
  • 打赏
  • 举报
回复
如果不需要DLL返回信息,这样定义即可:
function ShowForm(const PDept: PChar): boolean; stdcall;

PB中:
FUNCTION boolean ShowForm(String PDept) LIBRARY "project1.dll"

5,928

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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