- 注册时间
- 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;
- }
复制代码
|
|