版权声明:所有版权归作者她的吻让他,转载请标明出处. 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