【问题标题】:Export function from exe file to dll project on C++将函数从 exe 文件导出到 C++ 上的 dll 项目
【发布时间】:2022-01-22 22:38:29
【问题描述】:

我在 Visual Studio 中使用 C++ 编程。我有一个项目是服务器,第二个项目是一个可以上传到服务器的DLL,为了让我通过DLL发送一些特殊的命令,我需要从服务器传递一个函数。我尝试以这种方式从服务器导出函数

extern "C" __declspec(dllexport) void send_peer_command(Peer* peer, const std::string& lua_command);

但它不起作用。所以我需要将函数从 exe 文件导出到 C++ 上的 dll 项目。我尝试了很多方法,但我没有成功,请告诉我该怎么做。我知道这不是最好的解决方案,但我迫切需要这样做。我知道有办法做到这一点,但是这样的例子很少,只要你能举个简单的例子,我就需要这些了

【问题讨论】:

  • @drescherjm 这不是真的。你可以并且它被记录在案。 DLL 和 EXE 仅在名称、典型用例和操作系统行为上有所不同,它们是 PEXE 格式的文件。实际上,在调试模式下,本机 MS 编译器确实导出了一些用于调试目的的函数。有几个 Windows 模块同时是 dll、控制台应用程序和服务。还有这个:codeguru.com/windows/…
  • 您确定不能为您的任务使用共享内存、进程间同步、IPC 或 COM 吗?从技术上讲,是的,它们是通过最低级别的导出/导入实现的,但是您已经开发了通信基础设施。
  • @Swift - Friday Pie thx you!您的链接对我有帮助!

标签: c++ dll export


【解决方案1】:

有些事情你需要弄清楚

  • DLL 可以导出函数,可执行文件不能,至少不值得这样做。你可以尝试让服务端调用DLL导出的函数或者实现某种插件架构。
  • 导出的函数不能接受/返回除 POD 或由 POD 组成的结构之外的任何内容。 const std::string 的 POD 等效项是 const char*。从技术上讲,它们实际上可以,但它不起作用。

【讨论】:

  • 第一点不正确,第二点半正确。导出不符合 WinAPI 约定的详细记录要求的函数将无法与使用不同编译器或运行时库编译的模块互操作。从技术上讲,您仍然可以,但是如果调用对流并且交换的非 pod 结构没有相同的模型,您将依赖可能的 UB。非平面数据类型的存储也会受到影响。在 WinAPI 中,调用者通过在参数中提供指针来提供存储是很典型的。或者返回的值是全局存储的句柄
猜你喜欢
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多