1 客户端函数声名:
1)笮⌒疵舾小?br />
2)与DLL中的声明一样。
如: showform(form:Tform)Farexternal\'yproject_dll.dll\'
3)调用时传过去的参数类型最好也与windows c++一样。
4)调用时DLL必须在windows搜索路径中,顺序是:当前目录;Path路径;windowswidowswindows
二 调用动态载入
1 建立一种过程类型[如果你对过程类型的变量只是一个指针的本质清楚的话,你就知道是怎么回事了]。如:
type
mypointer=procedure(form:Tform)Farexternal
var
Hinst:Thandle
showform:mypointer
begin
Hinst:=loadlibrary(\'yproject_dll\')//Load一个Dll,按文件名找。
showform:=getprocaddress(Hinst,\'showform\')//按函数名找,大小写敏感。如果你知道自动化对象的本质就清楚了。
showform(application.mainform)//找到函数入口指针就调用。
Freelibrary(Hinst)
end
这是我以前的回答,是个两数加法的例子,看了就明白了你的dll不必用h头文件,你用的是显式声明导出函数
vc在显式声明函数时会出现与vb不匹配的问题,他会把函数名改了,你必须用隐式声明,就是def文件声明才可以。
你的cpp里直接写
int __stdcall add(int a, int b)
{
return (a+b)
}
然后再在工程里添加一个文本文件,注意,文件名是 makedll(如果不对就是工程名).def
里面写
LIBRARY makedll
EXPORTS
add @1
然后保存
编译、连接
得到的dll就是vb可以调用的了
vb里呢,不用怎么改
如下
Public Declare Function add Lib "makedll.dll" (ByVal a As Integer,ByVal b As Integer) As Integer
Private Sub Command1_Click()
Dim c As Integer
c = add(1, 2)
MsgBox c
End Sub
这有就应该没问题了