1.编写DLL
a)文件--打开--新建项目--Win32,右侧Win32项目,填写好项目名称,点击“下一步”,
应用程序类型选择:“DLL(D)”,附加选项:空项目(E),然后完成。
b)编写头文件(edrlib.h):
- #ifdef __cplusplus
- #define EXPORT extern "C" __declspec (dllexport)
- #else
- #define EXPORT __declspec (dllexport)
- #endif
- EXPORT void EdrCenterTextA();
- EXPORT void EdrCenterTextW();
- EXPORT int IncCounter();
- #ifdef UNICODE
- #define EdrCenterText EdrCenterTextW
- #else
- #define EdrCenterText EdrCenterTextA
- #endif
注解:
i. 定义 __cplusplus表示是供C++程序中调用。
ii.__declspec (dllexport)表示函数调用方式,此处表示VS2008工程属性调用的默认方式。更改方法:
右击项目--属性--配置属性--C/C++--高级,更改右侧“调用约定”。
c)编写DLL文件(edrlib.cpp):
- #include "windows.h"
- #include "edrlib.h"
- //counter供调用该DLL的所有应用程序共享
- #pragma data_seg("shared")
- int counter=0;
- #pragma comment(linker,"/SECTION:shared,RWS")
- int WINAPI DllMain(_In_ HANDLE _HDllHandle, _In_ DWORD _Reason, _In_opt_ LPVOID _Reserved)
- {
- return TRUE;
- }
- EXPORT void EdrCenterTextA()
- {
- MessageBox(NULL,TEXT("调用DLL函数!"),TEXT("ASSIC版本"),MB_OK);
- }
- EXPORT void EdrCenterTextW()
- {
- MessageBox(NULL,TEXT("调用DLL函数!"),TEXT("UNICODE版本"),MB_OK);
- }
- EXPORT int IncCounter()
- {
- return ++counter;
- }
c)编译生成DLL。
2.调用DLL
方法一、
1。新建Win32应用程序空项目。
2。把生成的dll、lib这2个文件复制到新建的目录下。
3。添加导入库:工具--项目和解决方案--VC++目录,选择右侧“显示以下内容的目录”下的“库文件”,把lib所在目录添加。
4。头文件:edrlib.h(与编写DLL中一样)
5。源文件:main.c
- /*#define cplusplus*/ //c++调用方式
- #include "windows.h"
- #include "edrlib.h"
- #pragma comment(lib,"edrlib.lib")
- int WINAPI WinMain(__in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd )
- {
- TCHAR buf[32];
- wsprintf(buf,L"now,counter=%i",IncCounter());
- MessageBox(NULL,buf,L"--",MB_OK);
- EdrCenterText();
- return 0;
- }
解释:
可注释#pragma comment(lib,"TestDLL2.lib")这条,但必须设置链接库,方法:
右击项目--属性--配置属性--链接器--输入--附加依赖项:edrlib.lib
6.运行测试成功。