荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: Second (石开), 信区: Program
标 题: 在VB应用程序中调用VC环境下开发的DLL
发信站: 荔园晨风BBS站 (Wed Jun 6 06:58:46 2001), 转信
1. 调用DLL的优越性
动态链接库(DLL)作为Windows操作系统的基础,具有优越的应用性能:
DLL扩展了应用程序的特性。由于DLL能够动态地装入进程的地址空间,因此应用程
序能够在运行时确定需要执行什么操作,然后装入相应的代码,以便根据需要执行这些
操作。
DLL可以用多种语言进行编写。例如用VB来编写应用程序的界面,而用C++来编写诸
如算法、通讯之类的底层操作。
DLL简化了软件项目的管理。如果在软件开发过程中不同的工作小组在不同的模块上
工作,那么这个项目管理起来比较容易。
DLL有助于节省内存。如果两个或多个应用程序使用同一个DLL,那么该DLL的页面只
要放入RAM一次,所有的应用程序都可以共享它的各个页面。
DLL有助于资源的共享。DLL可以包含对话框模板、字符串、图标和位图等资源,多
个应用程序能够使用DLL来共享这些资源。
DLL有助于应用程序的本地化。例如,只包含代码而不包含用户界面组件的应用程序
可以加载包含本地化用户界面组件的DLL 。
DLL有助于解决平台差异。不同版本的Windows配有不同的函数,开发人员常常想要
调用新的函数。但是,如果源代码包含了对一个新函数的调用,而应用程序将要在不能
提供该函数的Windows版本上运行,那么操作系统的加载程序将拒绝运行该进程。如果将
这些新函数保存在DLL中,那么应用程序就能够将它们加载到Windows的老版本上,就可以
成功地调用该函数。
2.找到DLL的入口点
初次接触DLL的用户经常会遇到一个问题:在VC环境下创建的DLL,在VC里运行的好
好的,可在VB应用程序中调用时却老是出现"调用约定错误"、"找不到入口点"之类的错
误。这主要是由以下疏漏造成的。
首先,要注意DLL中的函数和VB中的函数声明在名称、返回类型、参数类型、参数个
数等方面必须完全相同,尤其要注意大小写的问题。
其次,在DLL的.def文件中必须加上入口函数。
最后,在函数定义前必须加上extern "c",_stdcall关键字。
具体格式可参看应用实例。
3.数组参数在DLL中的传递
由于DLL经常用来进行一些底层的运算操作,因此应用程序常需要传递大量的数据给
DLL。在C++中,指针是进行数组操作的最佳选择,但VB中没有指针的概念。这通常可用
两种方法来解决。
其一,在VB中声明DLL时,用byref来代替byval,即可将数组指针传递给DLL。
另外,将数组声明为变体型(variant),即可直接将数组传递给DLL。
4.应用实例
以下通过一具体实例来说明在VB中调用VC环境下创建的DLL的过程。
创建一用于信号处理的DLL,"SigPro.dll",其中有一个用于富氏计算的函数"Four
ier"。
VC中的声明:
在"SigPro.h"中加入以下代码,
extern "C"
{
double EXPORT _stdcall Fourier(long int *Sample,int NumSam,int OvertoneOrder
,bool SinOrCos);
}
在"SigPro.cpp"中加入以下代码,
extern "C"
double EXPORT _stdcall Fourier(long int *Sample,int NumSam,int OvertoneOrder
,bool SinOrCos)
{
int i;
double result=0.0;
if(SinOrCos==true)
{
for(i=0;i<NumSam;i++)
{
result=result+*(Sample+i)*cos(OvertoneOrder*i*2*3.1415926/NumSam);
}
}
else
{
for(i=0;i<NumSam;i++)
{
result=result+*(Sample+i)*sin(OvertoneOrder*i*2*3.1415926/NumSam);
}
}
result =result*2/NumSam;
return result;
}
在"SigPro.def"中加入以下代码,
EXPORTS
Fourier
VB中的调用声明:
Public Declare Function Fourier Lib "SigPro" (ByRef Sample() As Long, By
Val NumSam As Integer, ByVal OvertoneOrder As Integer, ByVal SinOrCos As Boo
lean) As Double
--
既然热爱生命
那么,
一切都在意料之中。
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.28.190]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店