演示vc动态链接库的创建和使用
2011-03-04 11:19
429 查看
/*********************************************************************************
* author: hjjdebug
* date: 2011
* description: 演示vc动态链接库的创建和使用
*********************************************************************************/
////////////////////////////////////////////////////////////////////////////////
//其中mydll.h 头文件如下
// 供调用者使用
////////////////////////////////////////////////////////////////////////////////
#pragma once
int add(int i, int j);
////////////////////////////////////////////////////////////////////////////////
// mydll 的动态链接库文件
////////////////////////////////////////////////////////////////////////////////
// mydll.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"
#ifdef _MANAGED
#pragma managed(push, off)
#endif
_declspec(dllexport) int add(int i, int j);
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
int add(int i, int j)
{
return i+j;
}
#ifdef _MANAGED
#pragma managed(pop)
#endif
////////////////////////////////////////////////////////////////////////////////
// mydll.dll 的静态使用
// 主程序如下:使用dll 与使用系统头文件没有不同
// 要想让主程序编译通过,必须要链接mydll.lib, 你需要把mydll.lib copy 到当前工作目录
// 或系统lib 目录, 或自己添加搜索路径, 才能编译通过。
// 运行时,要把mydll.dll copy 到执行文件目录,或系统执行dll 加载路径
////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include "mydll.h"
using namespace std;
#pragma warning(disable:4996)
int main(int argc, char *argv[])
{
int ret=add(3,5);
cout << "return is " << ret << endl;
system("pause");
return 0;
}
////////////////////////////////////////////////////////////////////////////////
// mydll.dll 的动态使用
// 可以不使用mydll.lib, 采用loadlibrary 加载mydll.dll, getprocaddr 获取导出函数地址
// 测试演示程序如下:
////////////////////////////////////////////////////////////////////////////////
#include <windows.h>
#include <iostream>
using namespace std;
////////////////////////////////////////////////////////////////////////////////
// mydll.dll 的动态使用
// 可以不使用mydll.lib, 采用loadlibrary 加载mydll.dll, GetProcAddress 获取导出函数地址
// 测试演示程序如下
// 注意: 当你用动态加载方式时,dll 源文件需加extern "C" { } 导出 c 格式函数名称。
// 否则GetProcAddress 会取不到地址
// 关于怎样将多个导出地址封装成一个单例类,请参见我的另一篇帖子
////////////////////////////////////////////////////////////////////////////////
typedef int (*f_add)(int i, int j);
int main(int argc, char *argv[])
{
HMODULE hModule = LoadLibrary("mydll.dll");
if(!hModule)
{
cout << "can't load mydll.dll library!" << endl;
return -1;
}
f_add add=(f_add)GetProcAddress(hModule,"add");
if(!add)
{
cout << "can't get proc address!" << endl;
return -1;
}
int ret = add(3,5);
cout << "ret is "<<ret <<endl;
return 0;
}
* author: hjjdebug
* date: 2011
* description: 演示vc动态链接库的创建和使用
*********************************************************************************/
////////////////////////////////////////////////////////////////////////////////
//其中mydll.h 头文件如下
// 供调用者使用
////////////////////////////////////////////////////////////////////////////////
#pragma once
int add(int i, int j);
////////////////////////////////////////////////////////////////////////////////
// mydll 的动态链接库文件
////////////////////////////////////////////////////////////////////////////////
// mydll.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"
#ifdef _MANAGED
#pragma managed(push, off)
#endif
_declspec(dllexport) int add(int i, int j);
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
int add(int i, int j)
{
return i+j;
}
#ifdef _MANAGED
#pragma managed(pop)
#endif
////////////////////////////////////////////////////////////////////////////////
// mydll.dll 的静态使用
// 主程序如下:使用dll 与使用系统头文件没有不同
// 要想让主程序编译通过,必须要链接mydll.lib, 你需要把mydll.lib copy 到当前工作目录
// 或系统lib 目录, 或自己添加搜索路径, 才能编译通过。
// 运行时,要把mydll.dll copy 到执行文件目录,或系统执行dll 加载路径
////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include "mydll.h"
using namespace std;
#pragma warning(disable:4996)
int main(int argc, char *argv[])
{
int ret=add(3,5);
cout << "return is " << ret << endl;
system("pause");
return 0;
}
////////////////////////////////////////////////////////////////////////////////
// mydll.dll 的动态使用
// 可以不使用mydll.lib, 采用loadlibrary 加载mydll.dll, getprocaddr 获取导出函数地址
// 测试演示程序如下:
////////////////////////////////////////////////////////////////////////////////
#include <windows.h>
#include <iostream>
using namespace std;
////////////////////////////////////////////////////////////////////////////////
// mydll.dll 的动态使用
// 可以不使用mydll.lib, 采用loadlibrary 加载mydll.dll, GetProcAddress 获取导出函数地址
// 测试演示程序如下
// 注意: 当你用动态加载方式时,dll 源文件需加extern "C" { } 导出 c 格式函数名称。
// 否则GetProcAddress 会取不到地址
// 关于怎样将多个导出地址封装成一个单例类,请参见我的另一篇帖子
////////////////////////////////////////////////////////////////////////////////
typedef int (*f_add)(int i, int j);
int main(int argc, char *argv[])
{
HMODULE hModule = LoadLibrary("mydll.dll");
if(!hModule)
{
cout << "can't load mydll.dll library!" << endl;
return -1;
}
f_add add=(f_add)GetProcAddress(hModule,"add");
if(!add)
{
cout << "can't get proc address!" << endl;
return -1;
}
int ret = add(3,5);
cout << "ret is "<<ret <<endl;
return 0;
}
相关文章推荐
- vc++ 动态链接库 创建与基本使用
- VC动态链接库的创建和使用
- (转贴)VC中创建与使用静态链接库和动态链接库
- VC手把手一步步创建和使用动态链接库
- VC.Net中创建与使用静态链接库(lib)和动态链接库(dll),以及它们的区别
- VC.Net中创建与使用静态链接库(lib)和动态链接库(dll),以及它们的区别.
- VC.Net中创建与使用静态链接库(lib)和动态链接库(dll),以及它们的区别
- 在VC中创建和使用动态链接库(DLL)的一般方法
- 用VC创建并使用DLL
- Linux静态/动态链接库的创建和使用
- QT5 动态链接库的创建和使用
- 创建和使用动态链接库(转)vs2008 vs2010
- c#创建Dll动态链接库、C#使用动态链接库
- 创建和使用动态链接库 (C++)
- 使用VC++创建MapX控件步骤
- [转]使用VC/MFC创建一个线程池
- linux中动态链接库的创建与使用
- vs2010创建和使用动态链接库(dll)
- VS2010 动态库开发——第一章 演练:创建和使用动态链接库 (C++)
- 使用VC下的cl和link手工创建dll并实现函数导入