自己创建dll项目,编译后拿到.dll文件和.lib文件。
.h文件如下:(为了测试 没加extern “c” 函数前面也没加调用约定 最好加上_stdcall)
// MyDll.h: interface for the MyDll class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_MYDLL_H__7FB2193F_D30D_434B_A7DC_4A3A611D38BB__INCLUDED_) #define AFX_MYDLL_H__7FB2193F_D30D_434B_A7DC_4A3A611D38BB__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 _declspec(dllexport) int Plus(int x, int y); _declspec(dllexport) int Sub(int x, int y); _declspec(dllexport) int Div (int x, int y); #endif // !defined(AFX_MYDLL_H__7FB2193F_D30D_434B_A7DC_4A3A611D38BB__INCLUDED_)
.cpp文件如下:
1 // MyDll.cpp: implementation of the MyDll class. 2 // 3 ////////////////////////////////////////////////////////////////////// 4 5 #include "stdafx.h" 6 #include "MyDll.h" 7 8 ////////////////////////////////////////////////////////////////////// 9 // Construction/Destruction 10 ////////////////////////////////////////////////////////////////////// 11 int Plus(int x, int y) 12 { 13 return x+y; 14 } 15 int Sub(int x, int y) 16 { 17 return x-y; 18 } 19 int Div (int x, int y) 20 { 21 return x/y; 22 }
可用depends查看.dll文件:
有两种方法 显示链接 和 隐式链接
1 显示链接
#include "stdafx.h" #include <windows.h> int main(int argc, char* argv[]) { // 1 定义函数指针 typedef int(*lpPlus)(int,int); // 2 声明函数指针变量 lpPlus myplus; // 3 动态加载dll到内存中 HINSTANCE hModule = LoadLibrary("TestDll.dll"); // 4 获取函数地址 函数名使用depends可获得 myplus = (lpPlus)GetProcAddress(hModule,"[email protected]@[email protected]"); // 5 调用函数 int x = myplus(2,3); return 0; }
2 隐式链接
#include "stdafx.h" #include <windows.h> //1 #pragma comment(lib,"TestDll.lib") //2 _declspec(dllimport) int Plus(int x, int y); int main(int argc, char* argv[]) { // 3 调用函数 int x = Plus(2,3); return 0; }
--------------
上面是用dllexport导出,还有一种导出方式.def。这种方式可以隐藏函数名
创建dll项目,头文件和app文件和普通程序一样,项目中新增比如叫test.def 定义如下:
EXPORTS Plus @12 Sub @13 Div @15 NONAME
原文地址:https://www.cnblogs.com/lan0725/p/11497293.html
时间: 2024-10-31 08:53:34