社区
脚本语言
帖子详情
PB中怎样调用dll文件中的函数?
stlongzl
2003-03-28 11:16:30
PB中怎样调用dll文件中的函数?是不是象申明外部函数那样申明吗?这个Dll是不是需要注册呢?怎样注册?谢谢
...全文
664
7
打赏
收藏
PB中怎样调用dll文件中的函数?
PB中怎样调用dll文件中的函数?是不是象申明外部函数那样申明吗?这个Dll是不是需要注册呢?怎样注册?谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
IVANY
2003-03-28
打赏
举报
回复
将DLL文件放到system32的目录下或应用程序目录下(只要是PATH能找到的目录),DLL文件不需要注册
shahand
2003-03-28
打赏
举报
回复
PowerBuilder支持任何语言编写的动态连接库(DLL),通常DLL由C或Pascal编写
1.声明外部函数
[access] FUNCTION return_type func_name ( [REF] type arg1,...... ) LIBRARY "libname"
ALIAS FOR "extname"
说明:
(1) [access] 可取public,protected,Private 缺省Public
(2) [REF] 若使用表示 参数 通过地址传递
(3) 如果函数不存在,编译期间PowerBuilder不会通知用户
(4) 系统API可以在MSDN或者SDK帮助中查到,同时查到其dll对应的lib文件,但是函数名要加A
(4) 数据类型转化:
Windows里 PowerBuilder里
BOOL Boolean
HWND Uint
HANDLE Uint
LPCTSTR String
DWord Int
2.使用DLL文件中的函数与API函数使用相同
shahand
2003-03-28
打赏
举报
回复
在PB中使用VC++编制的DLL
2002-08-20· ·Oak··
本文介绍了动态链接库的基本特点,给出了VC++建立DLL以及在PowerBuilder中调用VC++创建的DLL函数的编程实例,实现了通过DLL连接PowerBuilder和VC++编制的不同程序的目的。
一、DLL概述:
动态链接库(Dynamic-Link Library),简称DLL,是基于Windows程序设计的一个非常重要的组成部分。使用DLL有许多优点:
(1)使用DLL的动态连接不是将库代码拷贝,只在程序中记录函数的入口点和接口,在程序执行时才将库代码装入内存,如果有多个程序使用相同的DLL,也只需将DLL在内存中装载一次,节省了内存开销。
(2)DLL是基于Windows的程序模块,它不仅包含可执行代码,还可以包含数据,各种资源,扩大了库文件的使用范围。
(3)对于一个大型的、不断更新的应用程序,可以将许多重复的功能写成DLL,用主程序调用,这样既减少了开发的工作量,又提高了访问速度。
(4)DLL丰富了PowerScript语言的编程能力,可以使用PowerScript函数集之外的函数。例如:用户可能编写图象处理系统来浏览文件并将其存放于数据库,该应用需使用浏览器,但用PowerScript语言未提供做这类工作的函数,为了操纵设备,需要与设备本身环境通信,该环境一般是厂商提供的动态链接库。
(5)DLL独立于编程语言,大多数WINDOWS编程环境都允许主程序调用DLL中的函数。即可以用VC++、VB、PowerBuilder、Delphi、汇编语言等建立DLL,然后在不同语言编制的应用程序中调用它。
下面用一个实例说明通过DLL实现PowerBuilder程序和VC++程序之间的连接。
二、 VC++创建DLL
VC++5.0中可以用MFC AppWizard自动生成Win32 DLL和MFC AppWizard DLL,启动VC之后,从File | New菜单项,选择New对话框中的Projects标签,选择新项目为MFC AppWizard(dll),输入工程名pbdll,点击OK按钮,弹出图1-1所示对话框,选择DLL类型为:Regular DLL using shared MFC DLL,然后点击Finish按钮。这样,AppWizard将自动创建一个包含基本要素的DLL框架,接着手工添加代码。
打开pbdll.cpp文件,添加如下函数:
extern "C" _declspec ( dllexport )
int PASCAL out_num(int x)
{
int y;
char msg[30];
y=x > >2;
sprintf(msg, "计算结果:%o ! ", y);
::MessageBox(NULL, msg, "信息", MB_OK);
return 0;
}
以上声明了函数out_num(),输入参数为一个整型数,作移位运算后,用对话框将计算结果显示出来。 接着打开pbdll.def文件,在EXPORTS下输入函数说明out_num,文件内容如下:
LIBRARY "pbdll"
DESCRIPTION 'pbdll Windows Dynamic Link Library'
EXPORTS
; Explicit exports can go here
out_num @1
最后编译生成动态链接库pbdll.dll。
三、在PowerBuilder中调用VC++创建的DLL函数
为了在PowerBuilder应用程序中调用存放在动态链接库pbdll.dll中的函数out_num(),需要事先声明。在声明时要明确:
(1)函数的作用范围是全局的还是局部的。全局声明可使该函数用于整个应用,局部声明仅使该函数在对象的脚本中有效。
(2)必须指明函数返回的数据类型、传递参数的个数和类型,并将存放该函数的动态链接库的名字告诉PowerBuilder。
声明完成后,应用程序可以调用函数out_num() ,调用该函数的代码与调用任何标准的PowerScript函数一样,区别在于:该函数存放在动态链接库中,调用它时,动态链接库装入内存,函数执行。
下面是PowerBuilder中被调用函数的使用声明:
Function int out_num ( int irow ) LIBRARY "pbdll.dll"
在PowerBuilder中调用函数out_num()代码如下:
int irow,retcode
irow=dw_1.rowcount()
retcode=out_num(irow)
四、 加载DLL
当PowerBuilder应用程序调用外部函数时,动态链接库装入内存。操作系统会在如下位置查找动态链接库:
(1)EXE文件运行的目录。
(2)Windows的系统目录。
如果没有找到DLL,应用程序将产生运行错误,显示一个对话框,见图1-2(略)。如果找到DLL,它就被映射到程序的内存空间。
五、 结束语
DLL为不同编程环境下的应用程序之间的连接提供了方便,节省了内存,提高了速度,同时也丰富了PowerScript语言的编程能力。
shahand
2003-03-28
打赏
举报
回复
不需要注册,但是需要在当前path中
IVANY
2003-03-28
打赏
举报
回复
如下:
FUNCTION ulong GetComputerName(ref string lpBuffer,ref ulong nSize) LIBRARY "kernel32.dll" ALIAS FOR "GetComputerNameA"
PUBLIC FUNCTION ulong GetDC(ulong hwnd) LIBRARY "user32.dll"
long5
2003-03-28
打赏
举报
回复
关注!
th820901
2003-03-28
打赏
举报
回复
up
pb
调用
dll
实例
--- 动态链接库(Dynamic-Link Library),简称
DLL
,是基于Windows程序设计的一个非常重要的组成部分。使用
DLL
有许多优点:(1)使用
DLL
的动态连接不是将库代码拷贝,只在程序
中
记录
函数
的入口点和接口,在程序执行时才将库代码装入内存,如果有多个程序使用相同的
DLL
,也只需将
DLL
在内存
中
装载一次,节省了内存开销。(2)
DLL
是基于Windows的程序模块,它不仅包含可执行代码,还可以包含数据,各种资源,扩大了库
文件
的使用范围。(3)对于一个大型的、不断更新的应用程序,可以将许多重复的功能写成
DLL
,用主程序
调用
,这样既减少了开发的工作量,又提高了访问速度。(4)
DLL
丰富了PowerScript语言的编程能力,可以使用PowerScript
函数
集之外的
函数
。例如:用户可能编写图象处理系统来浏览
文件
并将其存放于数据库,该应用需使用浏览器,但用PowerScript语言未提供做这类工作的
函数
,为了操纵设备,需要与设备本身环境通信,该环境一般是厂商提供的动态链接库。(5)
DLL
独立于编程语言,大多数WINDOWS编程环境都允许主程序
调用
DLL
中
的
函数
。即可以用VC++、VB、PowerBuilder、Delphi、汇编语言等建立
DLL
,然后在不同语言编制的应用程序
中
调用
它。下面用一个实例说明通过
DLL
实现PowerBuilder程序和VC++程序之间的连接。
PB
9
调用
C++的
dll
实例
管理系统常用
pb
开发,少不了外部接口,
PB
9外部接口
调用
C++的
dll
,测试程序。
使用AWS轻松构建
PB
级企业BI解决方案
AWS提供了强大的数据分析能力,您可以在无需任何服务器的情况下,构建企业的BI解决方案,分析高达
PB
级别的数据,而成本不到传统方式的十分之一,也无需管理复杂的基础设施。在本次的在线研讨会
中
,我们将介绍如何使用 Amazon Redshift 及 Amazon Quicksight 等服务,构建一个可扩展,高性能的数据仓库的解决方案。
PB
MD5加密
DLL
文件
在
PB
里面实现MD5加密方法。 在全局
函数
里面声明后,即可在程序当
中
使用,声明方式如下: FUNCTION String MDString(string arg1,int arg2) Library "md5.
dll
" alias for "MDString;Ansi"
pb
取EXE/
DLL
的
文件
版本
pb
用api取
文件
的版本号。 所用
函数
GetFileVersionInfoSize GetFileVersionInfo VerQueryValue
脚本语言
740
社区成员
8,036
社区内容
发帖
与我相关
我的任务
脚本语言
PowerBuilder 脚本语言
复制链接
扫一扫
分享
社区描述
PowerBuilder 脚本语言
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章