Winapi 强制DLL依赖项 背景

Winapi 强制DLL依赖项 背景,winapi,visual-c++,dll,coupling,Winapi,Visual C++,Dll,Coupling,我的解决方案包括两个项目: 标准Windows应用程序 我的应用程序不直接使用的DLL,而是将其注入目标进程 基本上,从我的应用程序的角度来看,DLL必须满足的唯一要求是存在于我的应用程序的工作目录中。简而言之,我的DLL不会导出我的应用程序感兴趣的任何函数 问题: 我想强烈地耦合这两个二进制文件。除了在我的应用程序中手动调用LoadLibrary之外,我还有哪些选择 如果这太模糊,请让我知道 编辑 由于似乎没有人“回答”,我最终做了EFraim建议的事情(见评论) 我从DLL中导出了一个伪

我的解决方案包括两个项目:

  • 标准Windows应用程序
  • 我的应用程序不直接使用的DLL,而是将其注入目标进程
  • 基本上,从我的应用程序的角度来看,DLL必须满足的唯一要求是存在于我的应用程序的工作目录中。简而言之,我的DLL不会导出我的应用程序感兴趣的任何函数


    问题: 我想强烈地耦合这两个二进制文件。除了在我的应用程序中手动调用
    LoadLibrary
    之外,我还有哪些选择

    如果这太模糊,请让我知道


    编辑 由于似乎没有人“回答”,我最终做了
    EFraim
    建议的事情(见评论)


    我从DLL中导出了一个伪函数,并将DLL生成的
    *.lib
    文件作为附加依赖项添加到应用程序的链接器属性表中。现在,在运行时,如果DLL丢失,Windows会给出一条很好的错误消息并终止执行。另外,在IAT初始化成功后,DLL映像也被锁定;这可以防止像用户删除这样的事情。

    如果您不希望单独释放dll和exe,您可以将dll添加到资源中,并在启动时将其解压缩

    如果您不希望单独发布dll和exe,您可以将dll添加到资源中,并在启动时将其解压缩

    您是想在编译时耦合构建项目,还是在运行时耦合二进制文件本身?我想在运行时耦合它们。也就是说,如果我的DLL不在应用程序的工作目录中,我希望我的应用程序失败(如果可能,不要静默)。这类事情是手动完成的(例如,通过LoadLibrary等),还是在我的应用程序的属性表中自动设置的?接下来,如果我创建了一个虚拟导出,我的应用程序将通过其IAT使用该导出,而我的DLL恰好丢失,会发生什么情况?这种行为是可预测的吗?Windows会终止我的应用程序的执行吗?如果它没有延迟加载,那么是的,应用程序甚至不会开始执行。EFraim,谢谢。应该通过回答来回答。;)您是想在编译时耦合构建项目,还是在运行时耦合二进制文件本身?我想在运行时耦合它们。也就是说,如果我的DLL不在应用程序的工作目录中,我希望我的应用程序失败(如果可能,不要静默)。这类事情是手动完成的(例如,通过LoadLibrary等),还是在我的应用程序的属性表中自动设置的?接下来,如果我创建了一个虚拟导出,我的应用程序将通过其IAT使用该导出,而我的DLL恰好丢失,会发生什么情况?这种行为是可预测的吗?Windows会终止我的应用程序的执行吗?如果它没有延迟加载,那么是的,应用程序甚至不会开始执行。EFraim,谢谢。应该通过回答来回答。;)