当前位置:文档之家› vb调用vc 的DLL

vb调用vc 的DLL

4.1 新建工程
打开在VC++6.0,new一个Win32-Dynamic-Link Library工程dlltest。

4.2 在工程中添加代码
4.2.1添加lib.h文件:
#ifndef _LIB_H_
#define _LIB_H_
extern “C” int __stdcall add(int,int) ;
extern “C” int __stdcall sub(int,int) ;
/*
__stdcall 约定
如果通过VC++ 编写的DLL 欲被其他语言编写的程序调用,应将函数的调用方式声明为__stdcall 方式,
WINAPI 都采用这种方式,而C/C++缺省的调用方式却为__cdecl。

__stdcall 方式与__cdecl 对函数名
最终生成符号的方式不同
*/
#endif
4.2.2添加lib.cpp文件:
#include “lib.h”
int __stdcall add(int a,int b)
{
return a+b ;
}
int __stdcall sub(int a,int b)
{
return a-b ;
}
4.2.3添加lib.def文件:
右击SOURCE FILE目录,添加一个文本文件(不能是word文档,一般是txt 格式的),将文档重命名为lib.def,点击打开该文档。

在文档中输入代码:
LILBRARY dlltest
EXPORTS
add @ 1
sub @ 2
说明:DLL函数的导出有两种方式。

一种是显式导出:在.h文件中在函数声明前加入如下语句:
__declspec(dllexport)。

使用该方法是不用添加.def文档的。

该方法导出的函数,只能被C或C++调用,不能被其他语言调用。

一种是隐式导出:就是在SOURCE FILE目录中添加一个.def文档,在该文档中写入要导出函数的代码。

.def语法规定注释用分号(;),且注释不能与代码共享一行,代码说明如下:LIBRARY dlltest
;该语句说明了相应的DLL工程。

EXPORTS
add @ 1
sub @ 2
;该语句声明了将DLL工程中导出的函数,只要写入
;函数名称即可,不用说明返回值以及函数参数。

其实@ 1
;和@ 2是为函数编号所使用的
在添加所有的工程文件后,编译生成dll文件后
4.3 用vc调用DLL
在vc中new一个Win32 Console Application 工程test
代码如下:
#include <windows.h>
#include <stdio.h>
typedef int (__stdcall *padd)(int,int) ;
typedef int (__stdcall *psub)(int,int) ;
int main()
{
HINSTANCE hd ;
hd = LoadLibrary(“填入要调用DLL的路径”) ;
if(!hd)
{
printf(“Load DLL err\n”) ;
return 0 ;
}
padd add = (padd)GetProcAddress(hd,“add”) ;
if(!add)
{
printf(“Get add err\n”) ;
FreeLibrary(hd) ;
return 0 ;
}
psub sub = (psub)GetProcAddress(hd,“sub”) ;
if(!sub)
{
printf(“Get sub err\n”) ;
FreeLibrary(hd) ;
return 0 ;
}
printf(“add=%d\nsub=%d\n”,add(1,2),sub(5,3)) ;
FreeLibrary(hd) ;
return 0 ;
}
4.4 用vb调用DLL
代码如下:
Public Declare Function add Lib "dlltest.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。

相关主题