关于EXE中导出函数接口问题

本文探讨了在EXE中导出函数接口的方法及其实现过程,通过示例展示了如何在头文件中声明导出函数,并在CPP文件中实现。文章还分享了调试过程中的发现,指出EXE导出接口可能存在的限制,并提供了使用DLL作为替代方案的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

exe中导出函数接口原本我是不知道的,但是实际开发过程中需要使用到接口,这时一个老员工就跟我们讲可以在exe中导出函数接口,因为exe跟dll都是pe文件,于是我进行了尝试,但是也发现问题

实现

在头文件中申明要导出的函数接口

extern "C" int __declspec(dllexport) _cdecl Exporter(char * cInput,char *cOutput);

 在cpp文件中实现该接口,这里我的接口仅仅返回了1+1

int Exporter(char * cInput,char *cOutput)
{

	//char Input[MAX_PATH] = {0};
	//sprintf(Input,"%s_OK",cInput);

	//strcpy(cOutput,Input);

	return 1+1;

}

下面编译下,生成如下文件

下面使用工具看下到底有没有导出函数接口

可以看到确实导出了接口

下面试一下能不能使用该接口(跟dll的调用方式一致)

HMODULE h = LoadLibrary(_T("initiator.exe"));

	typedef int ( _cdecl *Exporter1)(char * cInput,char *cOutput);

	if (h != NULL)
	{
		Exporter1 Ex = (Exporter1)GetProcAddress(h,"Exporter");
		char cOutput[MAX_PATH] = {0};
		int i = Ex("Hello world",cOutput);

		OutputDebugStringA("");

	}

编译后调试程序

可以看到这时候i = 2,说明函数确实是导出了

但是我们要导出函数不可能只实现这种弱智功能,下面我演示下导出一个复杂点的函数

把上面的导出函数实现修改下

int Exporter(char * cInput,char *cOutput)
{

	char Input[MAX_PATH] = {0};
	sprintf(Input,"%s_OK",cInput);

	strcpy(cOutput,Input);	

	return 0;

}

其他步骤跟上面一样

下面调试下

直接奔溃

我找了网上的资源讲解,意思是exe导出的接口应该面向资源,比如一个数据什么的而不应该面向代码流程

具体怎么解决该问题目前我还没有发现,但是提供一个解决方案:使用dll导出函数

给一个链接,里面有一些问题汇总

https://www.cnblogs.com/thinkinlove/archive/2008/11/12/1320797.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值