当前位置:首页 > 多媒体相关

在PB中使用VC++编制的DLL



热门问答:
  • 请问如何使MDIForm的最大最小化功能不可用??? [详细内容]
  • 输入流输出流,搞不懂啊!!!! [详细内容]
  • Socket多端口侦听,不能用两个线程侦听两个端口吗? [详细内容]
  • 请教各位大哥,我该怎么办?? [详细内容]
  • 高手帮忙(java 的telnet) [详细内容]

  • 推荐阅读
      · g901的gprs上网wap浏览一得
        摘要:联想g901支持通用无线分组通信业务(gprs),可以在基于gsm网络的gprs功能支持下进行浏览因特网、收发电子邮件等操作,从而使手机发挥更加强大的功能。同时,......
      · nvidia和sun结盟为java工作站提供支持新闻新品
        摘要:  日前,nvidia宣布和sun公司达成专业图形联盟。nvidia将为sun采用solaris、windows或者linux操作系统的sunjava工作站提供nvidiaquadro图形解决方案。·美丽接触海畅span芯r280靓图欣赏·入门用户必看!酷睿双核配置推荐·最低79911款x1650xt全面阻击76gt·难得一见 精英高端板ka3现身市场·“日光魔盒”解决3g手机用电尴尬  日前,nvidia宣布和su......

    正文
      本文介绍了动态链接库的基本特点,给出了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文件,添加如下函数:

      以上声明了函数out_num(),输入参数为一个整型数,作移位运算后,用对话框将计算结果显示出来。   接着打开pbdll.def文件,在exports下输入函数说明out_num,文件内容如下:

      最后编译生成动态链接库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()代码如下:

      四、 加载dll

      当powerbuilder应用程序调用外部函数时,动态链接库装入内存。操作系统会在如下位置查找动态链接库:

      (1)exe文件运行的目录。
      (2)windows的系统目录。

      如果没有找到dll,应用程序将产生运行错误,显示一个对话框,见图1-2(略)。如果找到dll,它就被映射到程序的内存空间。

      五、 结束语

      dll为不同编程环境下的应用程序之间的连接提供了方便,节省了内存,提高了速度,同时也丰富了powerscript语言的编程能力。

    讨论区

    Login