VC中dll的使用方式
1 首先生成dll
在vc中新建win32 dll项目,定义函数,如下:
#include <windows.h>
__declspec(dllexport) int add(int a, int b)
{
return a+b;
}
需要用__declspec(dllexport)声明哪些函数是要在dll中export的。
之后编译生成dll。
用vs自带的Dependency Walker可以看到函数被export了。
2 使用dll
先用LoadLibrary加载动态库:
HINSTANCE hdll = LoadLibrary("dll_test.dll");
if (! hdll)
{
printf("load dll error\n");
return -1;
}
再用GetProcAddress获得需要使用的函数指针:
typedef int(*padd)(int, int);
padd add;
add = (padd)GetProcAddress(hdll,"add");
if (! add)
{
printf("get add error\n");
return -1;
}
再就可以使用了:
add(a, b)
dll使用的第二种方式
调用工程连接动态库带的lib文件(在VC的project setting中的dependency中加入),函数声明和dll中的完全一致。
另,这种情况下应该会调用DllMain。
(参见windows程序设计-动态链接库一章)
转:http://blog.csdn.net/hellomike/archive/2009/10/24/4719338.aspx
分享到:
相关推荐
在Microsoft Visual C++ (VC) 开发环境中,DLL(Dynamic Link Library)是一种共享代码和资源的机制。DLL 文件可以被多个应用程序同时使用,以减少内存占用和提高代码重用性。理解VC中DLL的调用规则是开发高效、稳定...
在VC++开发中,有时我们需要...总结来说,VC++调用DLL中的资源涉及了DLL的创建、资源的添加、导出资源函数的实现以及在主程序中加载和使用这些资源。掌握这些技巧,将有助于你在开发中实现更加高效和灵活的代码结构。
本文将详细阐述在VC++中使用DLL时的调用规则,以及如何有效地加载和使用DLL中的函数和类。 1. **DLL的创建** - 在VC++中创建DLL项目,选择“新建”->“项目”,然后在“Visual C++”类别下选择“Win32”项目类型,...
这种需求通常出现在需要重用已有代码或组件的情况下,例如在某个项目中使用了VC编写的DLL来实现特定功能,而新的项目则使用BCB作为开发工具。 #### 实现步骤详解 为了实现BCB调用VC编译的DLL,我们需要经历以下几...
- **调用导出函数**:使用`#import`或`LoadLibrary/GetProcAddress`方式调用DLL中的函数。静态链接时,函数调用如同普通函数;动态加载时,先用`LoadLibrary`获取DLL句柄,再用`GetProcAddress`获取函数地址。 - *...
- **dll中的全局变量**:访问dll中的全局变量需要加上`extern __declspec(dllimport)`前缀。这是因为这些变量是导出的,如果没有使用正确的修饰符,则无法在使用dll的单元中链接这些变量。与lib不同的是,dll只有...
在这段代码中,`LoadLibrary`函数用于加载DLL,`GetProcAddress`获取DLL中导出函数的地址,最后使用`FreeLibrary`卸载DLL。 编译并运行"CallDllApp",你应该能在控制台看到"Hello, World from DLL!"的输出,这就...
在主程序中使用LoadLibrary加载DLL,并通过GetProcAddress获取函数指针。 4. **调用DLL函数**:通过获取的函数指针来调用DLL中的函数。 5. **释放DLL**:在不再需要DLL时,使用FreeLibrary卸载DLL。 隐式链接和...
在VC的DLL中,通常会提供一个释放对象的接口,如`Release`或`Destroy`。 6. **文档和源码**: 源码和说明文档对理解VC的DLL类如何导出以及Delphi如何调用至关重要。它们应详细解释每个接口函数的用途、参数和...
在VC6.0中使用DLL和LIB涉及到动态链接库(Dynamic-Link Library,DLL)和静态链接库(Library,LIB)的创建与使用。下面将详细介绍如何在VC6.0环境下进行DLL和LIB的创建与使用。 首先,我们来看如何在VC6.0中创建...
然后,在代码中通过`#import`指令引入DLL,并使用其提供的接口函数。 2. 使用OCX:在资源视图中,通过“插入”->“控件”选项,选择需要的OCX控件,系统会自动生成对应的控件实例。在代码中,可以通过成员变量或指针...
为了使VB能够访问DLL中的函数,需要在VC的头文件中声明这些函数,并使用`__declspec(dllexport)`导出。例如: ```cpp #ifdef MY_DLL_EXPORTS #define MY_DLL_API __declspec(dllexport) #else #define MY_DLL_...
总之,VC调用DLL涉及到Windows API的使用,如LoadLibrary和GetProcAddress,以及在DLL中正确导出函数。理解这些概念对于开发涉及模块化和代码复用的Windows应用程序至关重要。通过熟练掌握DLL调用,你可以更高效地...
3. **导出函数**:为了让其他程序能够找到并使用这些函数,需要在DLL的源文件或头文件中使用`__declspec(dllexport)`关键字导出它们。 4. **创建项目**:在VC++ 6.0中,选择新建项目,然后选择Win32 Dynamic-Link ...
在Java中,使用`System.loadLibrary`加载DLL,然后通过`Native Method Bindings`调用DLL中的函数。例如: ```java static { System.loadLibrary("myDll"); } public native void callMyFunction(int arg); ``...
4. **导入DLL**:使用Delphi的`GetProcAddress`函数获取DLL中的导出函数地址。首先,通过`LoadLibrary`加载DLL,然后用`GetProcAddress`获取函数指针。例如: ```delphi var hDll: HMODULE; AddFunc: function(a,...
"vcDll vc6动态链接库"这一主题聚焦于Microsoft Visual C++ 6.0(简称VC6)开发环境中涉及到的DLL文件。 首先,我们要理解什么是Visual C++ 6.0。VC6是微软公司发布的一款经典的C++集成开发环境,广泛用于Windows...
接下来,我们要在另一个应用(例如`app.cpp`)中使用这个DLL。首先,我们需要包含DLL的头文件,或者使用`#pragma comment(lib, "wnd32dll.lib")`来链接导入库。然后,可以像调用普通函数一样调用DLL中的函数: ```...
在常规DLL中,可以使用`extern "C"`来导出C语言风格的函数,如`void fun()`,并确保每个导出函数的开头都包含`AFX_MANAGE_STATE(AfxGetStaticModuleState())`以处理MFC的状态管理。在客户端,只需导入相应的头文件和...