创建并调用Win32 DLL

来源:互联网 发布:硬质合金的重量算法 编辑:程序博客网 时间:2024/05/21 10:14

一、生成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

注:可使用Visual C++ 6.0自带的Depends工具,打开MyDll.dll,则可看到定义的导出函数.
二、调用Win32 DLL


方法一:隐式调用

(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
);
 

原创粉丝点击