利用VC调用动态链接库中的函数
2009-10-07 20:29:21 来源:WEB开发网三、程序代码
///////////////////////////////////////////////////////////////////////
// DLL.cpp : Defines the initialization routines for the DLL.
#include "stdafx.h"
#include "DLL.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
BEGIN_MESSAGE_MAP(CDLLApp, CWinApp)
//{{AFX_MSG_MAP(CDLLApp)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////// CDLLApp construction
CDLLApp::CDLLApp()
{}
/////////////////////////////////////////////////////////////////////////////// The one and only CDLLApp object
CDLLApp theApp;
extern "C" _declspec(dllexport) int Test(int i)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return ++i;
}
/////////////////////////////////////////////////////////////////////////DLL.def文件
; DLL.def : Declares the module parameters for the DLL.
LIBRARY "DLL"
DEscriptION 'DLL Windows Dynamic Link Library'
EXPORTS
////////////////////////////////////////////////////////////
void CTestDlg::OnBtest()
{
UpdateData(true);
typedef int(_cdecl *Connect)(int i);
HINSTANCE hinstDLL=NULL;
hinstDLL=LoadLibrary("dll.dll");
if (hinstDLL)
{
Connect Proc;
Proc = (Connect)GetProcAddress (hinstDLL,"Test");
int iValue = Proc(m_i);
FreeLibrary(hinstDLL);
char * p = new char[10];
sprintf(p,"%d",iValue);
AfxMessageBox(p);
}
else
{
AfxMessageBox("没找到dll");
}
}
四、小结
在文介绍了DLL技术,并给出了调用DLL中函数的实现代码,仿效这个例子,还可以编制出更多的适合自己应用系统所需的DLL,例如,用于数据采集卡的端口操作及扩展内存区访问、视频区缓冲区及BIOS数据区操作等许多实际应用的编程任务。必要时只需直接更新DLL,而用不着对应用程序本身作任何改动就可以对应用程序的功能和用户接口作较大的改善,实现版本升级。因此,掌握好DLL技术对Windows程序开发者很有裨益。
更多精彩
赞助商链接