创建并调用Win32 DLL

一、生成Win32 DLL

(1)创建Win32 DLL工程
File->New->Projects->Win32 Dynamic Link Library,在”Project name” 中输入MyDll->OK->An empty DLL project->Finish->OK

(2)添加头文件mydll.h
File->new->Files->C/C++ Header File,输入文件名为:mydll.h->OK
添加对应函数名
mydll.h:

extern "C" _declspec(dllexport) int Add(int x,int y);

(3)添加源文件mydll.cpp

File->new->Files->C/C++ Source File,输入文件名为:mydll->OK

mydll.cpp:

#include<stdio.h>
#include "mydll.h"
int Add(int x,int y)
{
   return x+y;
}


(4)编译,连接后,在Debug目录生成MyDll.dll,MyDll.lib

<h2>二、调用Win32 DLL</h2>
<h3>方法一:隐式调用</h3>

(1)File->New->Projects->Win32 Console Application,在"Project name" 中输入TestMyDll,OK,An empty project->Finish->OK
将MyDll.dll,MyDll.lib拷贝到TestMyDll目录下。

(2)File->new->Files->C/C++ Source File,输入文件名为:testmydll->OK
testmydll.cpp:

#include<stdio.h>
#pragma comment(lib,"MyDll.lib")
extern "C" _declspec(dllimport) int Add(int x,int y);
void main()
{
   int i=Add(1,2);
   printf("1+2=%d/n",i);
}

注:也可将#pragma comment(lib,”MyDll.lib”)注释掉,并在Project->Settings->Link>Object/library modules 中加入MyDll.lib

方法二:显示调用

只须将MyDll.dll拷贝到TestMyDll目录下。

#include<stdio.h>
#include<windows.h>

typedef int (*lpAdd)(int x,int y);

void main()
{
   int i=0;
   HINSTANCE hinstance=LoadLibrary("MyDll.dll");
   lpAdd add=(lpAdd)GetProcAddress(hinstance,"Add");
   i=add(1,2);
   FreeLibrary(hinstance);
   printf("1+2=%d/n",i);
}

注:
1.LoadLibrary:加载可执行模块

HINSTANCE LoadLibrary(
  LPCTSTR lpLibFileName   // address of filename of executable module
);

如果应用程序使用LoadLibrary显式链接,那么在这个函数的参数中可以指定DLL文件的完整路径。如果不指定路径,或是进行隐式链接,Windows将遵循下面的搜索顺序来定位DLL:
  1. 包含EXE文件的目录,
  2. 进程的当前工作目录,
  3. Windows系统目录,
  4. Windows目录,
  5. 列在Path环境变量中的一系列目录。

2.GetProcAddress:返回指定导出Dll函数的地址

FARPROC GetProcAddress(
  HMODULE hModule,    // handle to DLL module
  LPCSTR lpProcName   // name of function
);

发表评论

电子邮件地址不会被公开。 必填项已用*标注