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

版权声明:所有版权归作者她的吻让他,转载请标明出处. https://blog.csdn.net/qq_37059136/article/details/86604496

前言

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

猜你喜欢

转载自blog.csdn.net/qq_37059136/article/details/86604496