加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – .dll插件,它使用主可执行文件中定义的函数

发布时间:2020-12-16 09:43:15 所属栏目:百科 来源:网络整理
导读:我有一个主要的可执行文件加载.dll / .so插件,它在 Linux上工作得很好但在Windows上(Visual Studio 2012),它失败了未定义的引用错误. 该插件使用session- SendLine(“bla”)等函数,这些函数在Main可执行文件中定义. (在插件中包含的.h中定义的会话和方法类,
我有一个主要的可执行文件加载.dll / .so插件,它在 Linux上工作得很好但在Windows上(Visual Studio 2012),它失败了未定义的引用错误.

该插件使用session-> SendLine(“bla”)等函数,这些函数在Main可执行文件中定义. (在插件中包含的.h中定义的会话和方法类,但是在main exec中编译的.cpp中的实际函数).

tl; dr:“我需要Windows链接器来忽略插件中未定义的引用,在主可执行文件中定义”

什么是在Windows中“使其工作”的最佳方法,但在没有百万#ifdef的情况下保持与Linux兼容?

解决方法

Windows上的库链接处理方式与在Linux上处理它的方式完全不同.从插件到主机可执行文件的链接在Linux上很简单,但在Windows上却没有那么多.

在Windows上,链接到外部模块的传统方法是使用由.lib文件提供的导入库.为了这样做,您需要为可执行文件创建一个导入库,其中包含插件需要调用的所有导出函数.我从来没有为可执行文件创建导入库.通常你是为DLL做的.我甚至不确定它是否适用于可执行文件.

其他一些选择:

>从可执行文件导出函数,并在插件中使用GetProcAddress在运行时绑定到它们.>初始化插件时,传递包含所需功能的接口.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读