C++ 多个应用程序入口点

C++ 多个应用程序入口点,c++,python,windows,unit-testing,dll,C++,Python,Windows,Unit Testing,Dll,最近,我试图通过创建一个额外的(DLLMain)入口点来将单元测试添加到现有的二进制文件中,该入口点已经有了一个主入口点(它是一个控制台exe)。虽然我无法从python单元测试框架中将它用作DLL,但应用程序似乎编译正确,所有将exe用作DLL的尝试都失败了 有没有人有任何想法或经验,可以通过任何输入来添加额外的应用程序入口点,以解释为什么这样做会或不会起作用?我不确定,但我猜Windows只是拒绝将进程中的EXE和DLL作为新进程加载,简单明了 这些问题似乎包含更多细节: 在一个可执

最近,我试图通过创建一个额外的(DLLMain)入口点来将单元测试添加到现有的二进制文件中,该入口点已经有了一个主入口点(它是一个控制台exe)。虽然我无法从python单元测试框架中将它用作DLL,但应用程序似乎编译正确,所有将exe用作DLL的尝试都失败了


有没有人有任何想法或经验,可以通过任何输入来添加额外的应用程序入口点,以解释为什么这样做会或不会起作用?

我不确定,但我猜Windows只是拒绝将进程中的EXE和DLL作为新进程加载,简单明了

这些问题似乎包含更多细节:


在一个可执行映像中获取这两种行为的最简单方法是将其设计为DLL,然后使用
rundll32.exe
独立执行。无需编写自己的包装器。

要实现所需功能,您需要解决一些问题:

  • exe必须具有重定位表(使用链接器开关/修复:否)
  • exe必须至少导出一个函数-很清楚如何执行此操作
我建议使用不带开关(/headers、/exports和不带开关)的DUMPBIN.EXE来检查EXE头。您可以将应用程序的结构与导出某些函数的Winword.exe或outlook.exe进行比较

如果所有这些都没有帮助,我将尝试编写一个可以作为EXE加载的测试EXE应用程序,并在这里发布代码

更新:刚才验证了我的建议。它起作用了。文件Loadable.c如下所示

#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;
}