- 注册时间
 - 2021-4-16
 
- 最后登录
 - 2024-3-15
 
- 在线时间
 - 3 小时
 
 
 
 
 
编程入门 
  
	- 龙马币
 - 54 
 
 
 
 
 | 
 
隐式调用 
 
隐式调用有两种方法: 
 
1、需要dll文件、lib文件和头文件 
 
示例: 
 
 
- //Dll1.h
 
 - _declspec(dllimport) int add(int a,int b);
 
 - _declspec(dllimport) int subtract(int a,int b);
 
 -  
 
 - //导出一个c++类
 
 - class _declspec(dllimport) Point
 
 - {
 
 - public:
 
 -         void output(int x,int y);
 
 - };
 
 
  复制代码 
 
- //Dll1.cpp
 
 - #include <WINDOWS.H>
 
 - #include <stdio.h>
 
 - #include "Dll1.h"
 
 
  复制代码 
  
 
- //利用extern "C" _declspec(dllexport)可以修改导出函数的名称,
 
 - //在dumpbin中看到的函数名称就是原函数名,但不能用于类函数中
 
 - _declspec(dllexport) int add(int a,int b)
 
 - {
 
 -         return a+b;
 
 - }
 
 - _declspec(dllexport) int subtract(int a,int b)
 
 - {
 
 -         return a-b;
 
 - }
 
  
- //导出一个c++类
 
 - void Point::output(int x,int y)
 
 - {
 
 -         HWND hwnd=GetForegroundWindow();
 
 -         HDC hdc=GetDC(hwnd);
 
 -         char buf[20];
 
 -         memset(buf,0,20);
 
 -         sprintf(buf,"x=%d,y=%d",x,y);
 
 -         TextOut(hdc,0,0,buf,strlen(buf));
 
 -         ReleaseDC(hwnd,hdc);
 
 - }
 
 
  复制代码 
 
将以下三个文件拷贝 
 
 
 
调用示例: 
 
  先将以上三个文件拷贝到工程目录下(在这里我建立了一个名为dy的工程) 
 
- //dy.h
 
 - #include "Dll1.h"  
 
 - #pragma comment(lib,"Dll1.lib")
 
 
  复制代码 
 
- //dy.cpp
 
 - #include "stdio.h"
 
 - #include "dy.h"
 
 - int main()
 
 - {
 
 -         printf("%d",add(1,2));
 
 -         return 0;
 
 - }
 
  复制代码 
 
输出:3 
 
 
2、在项目中附加依赖的lib文件 
 
拷贝上述三个文件到工程目录 
 
流程:项目---> 属性--->配置属性-->链接器---->输入---附加依赖项 加入库名 
 
 
 
 
 
 
 
 
 
代码如下: 
- //dy.cpp
 
 - #include "stdio.h"
 
 - //#include "dy.h"
 
 - extern int add(int,int);
 
 - int main()
 
 - {
 
 -         printf("%d",add(1,2));
 
 -         return 0;
 
 - }
 
  复制代码 
 
显式调用 
 
只需拷贝dll文件,编译时什么都不需要,在需要使用dll中的函数时,通过LoadLibrary()和FindProcAdress()这两个API调用。 
 
在需要使用的时候DLL才被占用,使用完毕即被解除占用。DLL中有哪些函数可以通过Depends工具查询。 
 
 
- #include"stdio.h"
 
 - #include "stdlib.h"
 
 - #include "windows.h"
 
 -  
 
 - int main()
 
 - {
 
 -         HINSTANCE hInst;
 
 -         hInst=LoadLibrary(L"Dll2.dll");
 
 -         typedef int (*ADDPROC)(int a,int b);
 
 -         ADDPROC Add=(ADDPROC)GetProcAddress(hInst,"add");
 
 -         if (!Add)
 
 -         {
 
 -                 return -1;
 
 -         }
 
 -  
 
 -         int a=5,b=2;
 
 -         printf("a+b=%d\n",Add(a,b));
 
 -         return 0;
 
 - }
 
 
  复制代码 
 
 
 
 |   
 
 
 
 |