代码之家  ›  专栏  ›  技术社区  ›  Sean Edwards

VisualC++连接EXE插件插件?

  •  9
  • Sean Edwards  · 技术社区  · 16 年前

    我正在从Linux(GCC)移植到Windows(Visual C++ 2008)的大型C++应用程序,并与插件有链接问题。在Linux上这不是问题,因为.so支持运行时符号查找,但dll似乎不支持这一点。

    一些背景资料: 托管脚本环境的应用程序(主机)为插件(运行时通过脚本API调用加载的共享库)提供接口,允许在不重新编译主机应用程序的情况下扩展主机和脚本API。在Linux上,这只是在插件源中包含主机应用程序的头的问题,但在Windows上,我收到链接器错误。我不确定我需要什么来连接VisualC++来解决这些符号。

    简而言之,我的问题是: 在VisualC++中,如何将运行时加载的DLL链接到主机exe?

    编辑:为了用一个例子说明问题,我在宿主应用程序中有一个类, 对象 ,表示可由脚本访问的对象的基本类型。在我的插件中,我有许多扩展的类 对象

    4 回复  |  直到 16 年前
        1
  •  7
  •   1800 INFORMATION    16 年前

    “运行时符号查找”是什么意思?您的意思是使用动态加载库吗 dlopen dlsym so on ? 这个 equivalents in Windows LoadLibrary GetProcAddress

        2
  •  2
  •   Michael    16 年前

    你不能,很容易。windows加载程序的设计目的不是从EXE导出符号并将它们绑定到DLL中的符号。

    我看到的一种模式是DLL导出EXE调用的某个函数。它将包含DLL调用的EXE中函数地址的结构作为参数。

        3
  •  0
  •   Logan Capaldo    16 年前

    正如1800信息所说,不要这样做。将对象移出可执行文件并放入“第三个”DLL。将插件和可执行文件链接起来。

        4
  •  0
  •   Community CDub    8 年前

    我已经实现了同样的功能,构建了一个插件库,可以在Linux和Windows下构建。

    Linux下的解决方案是在gcc命令行中使用-rdynamic选项。这将导出主可执行文件中的所有符号,以便插件可以在加载时找到它们。

    相关职位: https://stackoverflow.com/a/3756083/1486836