使用.def来导出函数

1.启动vc2015,新建一个win32项目,项目名为Test2.

2.在“Win32应用程序向导”对话框中,选择应用程序类型为“DLL”,附加选项则选中“空项目”。

3.切换到解决方案视图,然后右击"头文件"添加一个头文件Test2.h并且为为添加代码

#ifndef _TEST2_H
#define _TEST2_H  //防止重复引用

#include "tchar.h" //为了使用_T

int f1(TCHAR *sz,int n);
void f2();
#endif // !_TEST2_H

4.右击“源文件”添加一个C++文件Test2.cpp,并且添加代码

#include "Test2.h"
#include "windows.h" //为了使用MessageBox

int f1(TCHAR *sz, int n) 
{
	MessageBox(0,sz,0,0);

	return n;
}

void f2() 
{
	MessageBox(0,_T("你好,f2"),0,0);

}

5.右击“源文件”,打开“添加新项”对话框,在左边选中“代码”,右边选中“模块定义文件(.def)”接着在名称文本框输入Test2.def,在Test2.def输入

EXPORTS
f1
f2

6.切换到解决方案视图,右击Test2生成。这样在解决方案的Debug目录下生成了Test2.dll,和Test2.lib。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.def文件是用来定义函数导出的名称以及函数的地址的文件,一般用于动态链接库(DLL)的开发。在Visual Studio中,使用.def文件可以指定DLL中哪些函数可以被外部程序调用。 下面是使用.def文件的步骤: 1. 创建一个DLL工程,选择Win32控制台应用程序模板。 2. 在项目中添加一个.def文件,右键单击项目,选择“添加”->“新建项”,选择“Module-Definition File(.def)”文件类型。 3. 打开.def文件,定义需要导出函数和变量,例如: LIBRARY MyDLL EXPORTS MyFunction1 MyFunction2 MyVariable1 DATA MyVariable2 DATA 其中,LIBRARY指定生成的DLL文件名,EXPORTS指定需要导出函数和变量名称。 4. 在需要导出函数和变量前面加上关键字__declspec(dllexport),例如: __declspec(dllexport) int MyFunction1(int a, int b) { return a + b; } __declspec(dllexport) int MyVariable1 = 10; 5. 编译生成DLL文件。 6. 在外部程序中调用DLL导出函数和变量,例如: #include <Windows.h> #include <iostream> typedef int(*MYFUNCTION)(int, int); typedef int* MYVARIABLE; int main() { HMODULE hModule = LoadLibrary(L"MyDLL.dll"); if (hModule == NULL) { std::cout << "LoadLibrary failed!\n"; return -1; } MYFUNCTION MyFunc1 = (MYFUNCTION)GetProcAddress(hModule, "MyFunction1"); if (MyFunc1 == NULL) { std::cout << "GetProcAddress failed!\n"; FreeLibrary(hModule); return -1; } int result = MyFunc1(1, 2); std::cout << "Result = " << result << "\n"; MYVARIABLE MyVar1 = (MYVARIABLE)GetProcAddress(hModule, "MyVariable1"); if (MyVar1 == NULL) { std::cout << "GetProcAddress failed!\n"; FreeLibrary(hModule); return -1; } std::cout << "MyVar1 = " << *MyVar1 << "\n"; FreeLibrary(hModule); return 0; } 注意:在使用.def文件时,必须将需要导出函数和变量前面加上关键字__declspec(dllexport),否则外部程序将无法调用DLL中的函数和变量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值