vc动态链接库编程
❶ 如何使用VC++动态链接库中的结构体
Win32 Dynamic-Link Library方式创建Non-MFC DLL动态链接库
每一个DLL必须有一个入口点,这就象我们用C编写的应用程序一样,必须有一个WINMAIN函数一样。在Non-MFC DLL中DllMain是一个缺省的入口函数,你不需要编写自己的DLL入口函数,用这个缺省的入口函数就能使动态链接库被调用时得到正确的初始化。如果应用程序的DLL需要分配额外的内存或资源时,或者说需要对每个进程或线程初始化和清除操作时,需要在相应的DLL工程的.CPP文件中对DllMain()函数按照下面的格式书写。
❷ VC++如何在一个动态链接库中调用其他动态链接库
以VC6为例,分为静态调用及动态调用,静态调用需要提供Lib及头文件,较为简单,而动态调用使用loadlibrary、FreeLibrary 加载及释放动态库,声明函数形参列表及变量,再取得函数地址送给此变量,变量名可以当函数名调用使用。
HINSTANCE m_hLib;
//声明形参列表
typedef LONG ( *pfn_Init) (形参);
//声明变量
pfn_Init fnInit;
LONG LoadLib()
{
m_hLib = NULL;
m_hLib = LoadLibrary(_T("XXX.dll"));
if (m_hLib == NULL)
{
cout <<"LoadLibrary XXX.dll Failed" << endl;
return -1;
}
return 0;
}
//取函数地址
fnInit = (pfn_Init) GetProcAddress (m_hLib, ("Init"));
//调用
fnInit ();
void FreeLib()
{
if (m_hLib != NULL)
{
FreeLibrary(m_hLib);
}
}
您手里至少得有个头文件,否则就只能用工具查看导出函数列表了。
❸ VC6.0如何创建以及调用动态链接库实例详解
动态链接库:dll不必被包含在最终的EXE中,EXE文件执行时可以动态地引用和卸载DLL文件。
同时,静态链接库中不能再包含其他的动态链接库或静态库,而动态链接库中可以包含其他的动态或静态库。
VC++支持的DLL:
DLL的编制与具体的编程语言及编译器无关,动态链接库随处可见,VC++支持三种DLL:非MFC动态库、MFC规则DLL和MFC扩展DLL。DLL导出函数(或变量、类)可供应用程序调用;DLL内部函数只能在DLL程序内使用,应用程序无法调用它们。
导出函数的声明方式:
一种在函数声明类型和函数名之间加上“_declspec(dllexport)”。
另外一种采用模块定义(.def)文件声明,需要在库工程中添加模块文件,格式如下:
LIBRARY 库工程名称
EXPORTS 导出函数名
DLL的调用方式:
一种静态调用,由编译系统完成对DLL的加载和应用程序结束时DLL的卸载。
另外一种动态调用,由编程者用API函数加载和卸载DLL(DLL加载—DLL函数地址获取—DLL释放)方式。
所有库工程编译时必须Release方式:
Build—set active configuration—选择库工程的release方式
一、 函数----创建动态链接库(MFC规则DLL)
1. New--projects--MFC AppWizard(dll)--Regular DLL using shared MFC DLL //取名为MFC_dll
2. def文件中添加:函数名(Add_new)
3. h文件中添加:外部函数声明//求和函数,函数名为Add_new
extern "C" __declspec(dllexport) int __stdcall Add_new(int a,int b);
4. cpp文件中添加: 外部函数实现
extern "C" __declspec(dllexport) int __stdcall Add_new(int a,int b)
{
return a+b;
}
5. build--set active configuration--win32 release--ok
6. 生成
7. 根目录下release文件夹中dll,lib与根目录下h文件即为所需
二、 函数----调用动态链接库(把MFC_dll.dll和MFC_dll.lib拷到工程所在目录)
//静态调用(.h可以写到.cpp文件中)
1. new--projects--win32 console application--an empty project
2. 添加h文件:(test.h)
#pragma comment(lib,"MFC_dll.lib") //告诉编译器DLL相对应的lib文件所在路径和文件名
extern "C" _declspec(dllimport) int _stdcall Add_new(int a,int b);//声明导入函数
3. 添加cpp文件:(main.cpp)
#include "test.h"
int main()
{
cout<<Add_new(10,3);
return 0;
}
//动态调用
#include <stdio.h>
#include <windows.h>
typedef int (* lpAddFun)(int ,int);//定义一个与Add_new函数接受参数类型和返回值均相同的函数指针类型
int main()
{
HINSTANCE hDll;//句柄
lpAddFun addFun;//函数指针
hDll=LoadLibrary("dllTest.dll");//动态加载DLL模块句柄
if(hDll)
{
addFun=(lpAddFun) GetProcAddress(hDll,"Add_new");//得到所加载DLL模块中函数的地址
if(addFun)
{
int result=addFun(2,3);
printf("%d",result); } FreeLibrary(hDll);//释放已经加载的DLL模块
}
return 0;
}
三、 变量----创建动态链接库(非MFC DLL)
1. new---projects---win32 dynamic-link library----an empty project(Sample)
2. 添加sample.h
#ifndef SAMPLE_H
#define SAMPLE_H
extern int dllGlobalVar;
#endif
3. 添加 sample.cpp
#include "sample.h"
#include <windows.h>
int dllGlobalVar;
bool APIENTRY DllMain(HANDLE hMole,DWORD ul_reason_for_call,LPVOID lpReserved)
//windows在加载DLL时,需要一个入口函数,就如同控制台或DOS程序需要main函数、win32程序需要winmain函数一样。所以引入一个不做任何操作的缺省DllMain的函数版本。是DLL的内部函数。
❹ VC2010 C++ 如何编写一个 简单的DLL(动态链接库) C++大牛 请进
下面示范一下用VS2010编写纯DLL,就是非ATL,MFC。
第一步:新建工程->选择WIN32->WIN32 项目->选择DLL,并且把下面的 空项目 勾选上
第二步:再新建一个.cpp文件 里面编写你的Dll具体内容
第三步:编写一个.def主要用来解决编码问题
好了,这就基本上是完成了Dll编写了。
如果说的太详细了,我怕这页面容不下额。
我以前写过这方面的文章,你可以去参看一下:
钩子编程(HOOK) 屏蔽所有按键鼠标及系统功能键:http://blog.csdn.net/qingjun/article/details/25861615
❺ 如何用VC编写dll文件
VC编写dll文件
1、VC++->New->Project->Win32 Dynamic_Link Library;
2、选择创建一个空工程;
首先DLL需要一个头文件,所以新建一个CC++ Header File
这个头文件中必须包含想要输出的变量和函数,头文件必须定义用于输出的任何符号和数据结构。
例如 :
证明调用动态链接库里的 Add函数成功。
❻ 介绍静态链接库和动态链接库的区别,及在VC++6.0中的建立和使用
动态链接库更类似于一种服务,而静态链接库就是一种把一些编译好的代码存放起来的仓库。
动态链接库还可以包含动态链接库或者静态链接库,而静态链接库中则不能使用别的库代码动态链接库只有当程序执行到调用库函数的时候才会找到库函数代码并执行,而静态链接库就是直接被包含进编译好的EXE文件,
编程中经常使用静态链接库,比如VC的很多代码都是以LIB形势提供的!