首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止链接到DLL中的特定函数,以保持与该DLL的旧版本的兼容性?

如何防止链接到DLL中的特定函数,以保持与该DLL的旧版本的兼容性?
EN

Stack Overflow用户
提问于 2022-10-19 23:57:36
回答 1查看 53关注 0票数 1

问题的简短文本如下:

我是否有可能指示微软的命令行C++编译器链接到动态库,并告诉链接器不要链接到该DLL中的一个特定函数,考虑到该函数的名称(损坏或未损坏)或它的序号,以便与不包含该函数的库的早期版本保持兼容性?

长篇的解释是:

我正在开发一个DLL,它是Autodesk Maya 2020的插件。这个DLL需要链接到Maya 2020的一个名为OpenMayaUI的动态库。

通常,为玛雅的一个主要版本(如2020年)构建的插件应该是二进制的,与该主要版本的任何其他次要版本都是兼容的。例如,使用Maya 2020.4构建的插件应该仍然加载在Maya 2020.0中.

然而,Autodesk在Maya 2020.3版本的OpenMayaUI.dll中引入了一个新的功能,它在Maya 2020.0、Maya 2020.1或Maya 2020.2中没有出现。因此,如果我构建我的插件,以便将其链接到来自Maya 2020.3或2020.4的OpenMayaUI.lib版本,尝试加载早期版本的Maya 2020的插件将失败,“找不到指定的过程”。(这是正确的,在早期版本的OpenMayaUI.dll中没有提供这个过程。)然而,链接到玛雅2020.0版本的OpenMayaUI.lib将产生一个可由任何版本的玛雅2020年加载的动态链接库。

不幸的是,构建我的插件的脚本需要能够在安装了任何版本的Maya 2020 (包括2020.3和2020.4 )的系统上运行。但我需要它生成的构建,以兼容玛雅2020.0,尽管如此。

那么,我是否有可能链接到Maya 2020.4版本的OpenMayaUI.lib,但以某种方式告诉链接器避免链接到动态库中的特定函数,而这个函数在Maya 2020.0版本的OpenMayaUI中并不存在?在本例中,我知道函数的确切名称,包括损坏的和未损坏的,并且我知道它在OpenMayaUI.dll的2020.0和2020.4版本中的序号。

我正在使用VisualStudio2019附带的微软命令行C++编译器构建插件。

编辑附加信息:违规函数是Maya的C++类中的一个虚拟成员函数,所以即使我没有调用它,我的DLL仍然会被链接到它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-22 15:51:11

我是否有可能链接到Maya 2020.4版本的OpenMayaUI.lib,但以某种方式告诉链接器避免链接到动态库中没有出现在OpenMayaUI的玛雅2020.0版本中的特定函数?

是。告诉链接器OpenMayaUI.dll将是延迟加载的

链接器对延迟加载DLL的支持

这样,您的代码从DLL中调用的每个函数都不会被静态地链接到插件的IMPORTS表中,而是在第一次调用时通过LoadLibrary()GetProcAddress()在运行时加载。这样,您的插件就有机会在调用缺失的函数之前验证DLL的版本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74133087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档