编程达人Windows核心编程,演示导出函数和变量的方法
演示导出函数和变量的方法—DLL程序
/************************************************************************
Module: MyLib.h
************************************************************************/
#pragma once
#ifdef MYLIB_EXPORT
//MYLIB_EXPORT必须在Dll源文件包含该头件前被定义
#define MYLIBAPI extern "C" __declspec(dllexport)
//本例中所有的函数和变量都会被导出
#else
#define MYLIBAPI extern "C" __declspec(dllimport)
#endif
//导出变量(应避免导出变量!)
MYLIBAPI extern int g_nResult;
//定义要导出的函数的原型
MYLIBAPI int Add(int nLeft, int nRight);
/*------------------------------------------------------------------------
19_MyLibFile1.cpp
演示导出函数和变量的方法---DLL程序
-----------------------------------------------------------------------*/
//包含标准的Windows头文件和C运行库头文件
#include <windows.h>
//
//在这个DLL源文件定义要导出的函数和变量
#define MYLIB_EXPORT //这个源文件中须定义这个宏,以告诉编译器函数要
//__declspect(dllexport),这个宏须在包含MyLib.h
//之前被定义
#include "MyLib.h"
//
//在.cpp文件中,函数或变量前不必再加__declspect(...)关键字,因为头文件中己经说明了
int g_nResult;
int Add(int nLeft, int nRight) {
g_nResult = nLeft + nRight;
return (g_nResult);
}
//
//以下DllMain不是必须的
//BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
//{
// switch (dwReason)
// {
// case DLL_PROCESS_ATTACH:
// case DLL_THREAD_ATTACH:
// case DLL_THREAD_DETACH:
// case DLL_PROCESS_DETACH:
// break;
// }
// return TRUE;
//}
///文件结束
/*------------------------------------------------------------------------
19_MyExeFile1.cpp
演示导出函数和变量的方法---测试程序
-----------------------------------------------------------------------*/
#include <windows.h>
#include <tchar.h>
#include <strsafe.h>
//包含DLL头文件
#include "MyLib.h"
#pragma comment(lib,"Mylib.lib")
//
int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
int nSum, nLeft = 10, nRight = 25;
nSum = Add(nLeft, nRight);
TCHAR sz[100];
StringCchPrintf(sz, _countof(sz), TEXT("%d + %d = %d\n g_nResult = %d"),
nLeft, nRight, nSum, g_nResult);
MessageBox(NULL, sz, TEXT("计算"), MB_OK);
return 0;
}