详细介绍如何在Visual Studio 2010中开发和调用DLL。DLL开发和调用分为多种,这里仅列举的是显示链接调用符号表接口的非MFC动态链接库。
生成DLL的代码
//-----------------------------------------------------------------------------
// 作者:寇香龙
// 日期:2014-01-23
// QQ: 643166601
// 邮箱:643166601@qq.com
// 说明:显示链接调用符号表接口的非MFC动态链接库,生成DLL程序
//-----------------------------------------------------------------------------
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "stdafx.h"
#include <iostream>
using namespace std;
void MQ_Function()
{
cout << "=================================================================" << endl;
cout << " CoperatorTestDLL" << endl;
cout << " --by Coperator" << endl;
cout << "=================================================================" << endl;
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
调用DLL代码
//-----------------------------------------------------------------------------
// 作者:寇香龙
// 日期:2014-01-23
// QQ: 643166601
// 邮箱:643166601@qq.com
// 说明:显示链接调用符号表接口的非MFC动态链接库,调用DLL程序
//-----------------------------------------------------------------------------
#include <Windows.h> //LoadLibrary
#include <iostream>
using namespace std;
typedef void(*DLL_MQ_Function)();
int main()
{
DLL_MQ_Function pDLL_MQ_Function_GetProcAddress;
HMODULE hLoadLibrary;
hLoadLibrary = LoadLibrary(TEXT("CoperatorTestDLL"));
if(NULL != hLoadLibrary)
{
cout << "Step 1: LoadLibrary succeed!" << endl;
pDLL_MQ_Function_GetProcAddress = (DLL_MQ_Function)GetProcAddress(hLoadLibrary, "MQ_Function");
if(NULL != pDLL_MQ_Function_GetProcAddress)
{
cout << "Step 2: GetProcAddress succeed!" << endl;
(pDLL_MQ_Function_GetProcAddress)();
}
else
{
cout << "Step 2: GetProcAddress fail!" << endl;
}
int nFreeLibrary = 0;
nFreeLibrary = FreeLibrary(hLoadLibrary);
if(0 < nFreeLibrary)
{
cout << "Step 3: FreeLibrary succeed!" << endl;
}
else
{
cout << "Step 3: FreeLibrary fail!" << endl;
}
}
else
{
cout << "Step 1: LoadLibrary fail!" << endl;
}
getchar();
return 0;
}
运行结果