两个情况: 1. ActiveX DLL: regsvr32 cfile.dll 在VB中project->reference 然后创建对象,并调用其方法2. 普通动态连接库 这就需要申明函数了,可以参考其它API申明的方式来做。 private declare function add lib "cfile" alias "add" (byval a as integer,byval b as integer) as integer
自己定义也可以。或者你用VC工程向导的“MFC AppWizard(dll)”->“Regular Dll with shared MFC”也就是第二项,这个就为你生成了.def。用MFC的DLL要有MFC支持哦~设计接口参数时,可 别 来个“... Func(CWordArray &a)”这样的东东……
主要是接口问题,我举个最简单的倒子给你: 一、在VC中建一个动态连接库工程取名XX,不要MFC支持 二、建一个C/C++文件,如XX.C,内容如下: SHORT SumTwo(SHORT a,SHORT b) { return a+b; } 三、建一个DEF文件,如XX.DEF,内容如下: EXPORTS SumTwo 四、将这两个文件都加入当前工程XX 五、将当前工程编译成XX.DLL 六、用VB来调用SumTwo这个函数,建新VB工程 七、在默认的FORM上加上一个按钮Command1 八、在Command1的OnClick中加入 MsgBox SumTwo(3,4) '显示3+4的值 九、将前面生成的XX.DLL复制到VB工程所在目录 十、在这个文件的最前面声明SumTwo这个函数 Private Function SumTwo Lib "XX.DLL" alias "SumTwo" (a As Integer,b As Integer) As Integer 十一、运行这个VB程,点击Command1按钮,你将得到3+4的和7 十二、关于第(十)步函数的声明请参看MSDN中的相关资料, 主要是参数和返回值的数据类型不能弄错。
犯了点小错,纠正一下: Private Function SumTwo Lib "XX.DLL" alias "SumTwo" (a As Integer,b As Integer) As Integer 这一行因为是我手工写的,所以,呵呵写成下面这样子吧: Private Declare Function SumTwo Lib "XX.DLL" alias "SumTwo" (ByVal a As Integer,ByVal b As Integer) As Integer 如果你的程序用的是C++代码,那么第(二)项的文件名就应该用.CPP
各位大虾,还有个小问题,我的函数是这样写的 int showx(int x) { return x; } 也按照你们上面给的方法声明了,def文件中也加了,可是调用的时候写成 showx(4),却报告我调用DLL约定错误,这怎么解决啊?我知道是参数类型的问题,可是这样子写参数类型还能不匹配?
1. ActiveX DLL:
regsvr32 cfile.dll
在VB中project->reference
然后创建对象,并调用其方法2. 普通动态连接库
这就需要申明函数了,可以参考其它API申明的方式来做。
private declare function add lib "cfile" alias "add" (byval a as integer,byval b as integer) as integer
一、在VC中建一个动态连接库工程取名XX,不要MFC支持
二、建一个C/C++文件,如XX.C,内容如下:
SHORT SumTwo(SHORT a,SHORT b)
{
return a+b;
}
三、建一个DEF文件,如XX.DEF,内容如下:
EXPORTS
SumTwo
四、将这两个文件都加入当前工程XX
五、将当前工程编译成XX.DLL
六、用VB来调用SumTwo这个函数,建新VB工程
七、在默认的FORM上加上一个按钮Command1
八、在Command1的OnClick中加入
MsgBox SumTwo(3,4) '显示3+4的值
九、将前面生成的XX.DLL复制到VB工程所在目录
十、在这个文件的最前面声明SumTwo这个函数
Private Function SumTwo Lib "XX.DLL" alias "SumTwo" (a As Integer,b As Integer) As Integer
十一、运行这个VB程,点击Command1按钮,你将得到3+4的和7
十二、关于第(十)步函数的声明请参看MSDN中的相关资料,
主要是参数和返回值的数据类型不能弄错。
Private Function SumTwo Lib "XX.DLL" alias "SumTwo" (a As Integer,b As Integer) As Integer
这一行因为是我手工写的,所以,呵呵写成下面这样子吧:
Private Declare Function SumTwo Lib "XX.DLL" alias "SumTwo" (ByVal a As Integer,ByVal b As Integer) As Integer
如果你的程序用的是C++代码,那么第(二)项的文件名就应该用.CPP
int showx(int x)
{
return x;
}
也按照你们上面给的方法声明了,def文件中也加了,可是调用的时候写成 showx(4),却报告我调用DLL约定错误,这怎么解决啊?我知道是参数类型的问题,可是这样子写参数类型还能不匹配?