C++ 多个应用程序入口点
最近,我试图通过创建一个额外的(DLLMain)入口点来将单元测试添加到现有的二进制文件中,该入口点已经有了一个主入口点(它是一个控制台exe)。虽然我无法从python单元测试框架中将它用作DLL,但应用程序似乎编译正确,所有将exe用作DLL的尝试都失败了C++ 多个应用程序入口点,c++,python,windows,unit-testing,dll,C++,Python,Windows,Unit Testing,Dll,最近,我试图通过创建一个额外的(DLLMain)入口点来将单元测试添加到现有的二进制文件中,该入口点已经有了一个主入口点(它是一个控制台exe)。虽然我无法从python单元测试框架中将它用作DLL,但应用程序似乎编译正确,所有将exe用作DLL的尝试都失败了 有没有人有任何想法或经验,可以通过任何输入来添加额外的应用程序入口点,以解释为什么这样做会或不会起作用?我不确定,但我猜Windows只是拒绝将进程中的EXE和DLL作为新进程加载,简单明了 这些问题似乎包含更多细节: 在一个可执
有没有人有任何想法或经验,可以通过任何输入来添加额外的应用程序入口点,以解释为什么这样做会或不会起作用?我不确定,但我猜Windows只是拒绝将进程中的EXE和DLL作为新进程加载,简单明了 这些问题似乎包含更多细节:
在一个可执行映像中获取这两种行为的最简单方法是将其设计为DLL,然后使用
rundll32.exe
独立执行。无需编写自己的包装器。要实现所需功能,您需要解决一些问题:
- exe必须具有重定位表(使用链接器开关/修复:否)
- exe必须至少导出一个函数-很清楚如何执行此操作
#include <windows.h>
#include <stdio.h>
EXTERN_C int __declspec(dllexport) WINAPI Sum (int x, int y);
EXTERN_C int __declspec(dllexport) WINAPI Sum (int x, int y)
{
return x + y;
}
int main()
{
printf ("2+3=%d\n", Sum(2,3));
}
该程序还可以运行并生成输出“5+4=9
”
#include <windows.h>
#include <stdio.h>
typedef int (WINAPI *PFN_SUM) (int x, int y);
int main()
{
HMODULE hModule = LoadLibrary (TEXT("C:\\Oleg\\ExeAsDll\\Loadable.exe"));
PFN_SUM fnSum = (PFN_SUM) GetProcAddress (hModule, "_Sum@8");
int res = fnSum (5,4);
printf ("5+4=%d\n", res);
return 0;
}