【发布时间】:2014-12-24 16:04:47
【问题描述】:
我想知道如果某些可执行文件或共享库中的某些函数没有一起编译,程序如何“识别”它们。我知道这听起来令人困惑,这里有一个非常详细的解释:
假设我有一个名为“A”的程序。现在我想将一些额外的编译共享库“B”放在某个指定的位置,以便“A”可以在其中运行函数,而无需更改 A 本身的代码。当然我也可以使用一些额外的文件,比如txt文件,当然源代码是可见的。我应该如何设计整个系统才能使其正常工作?
如果您将其视为游戏,E.G.纸牌游戏,情况如下。您拥有游戏,并且坚持编写纯 C++(因此您必须编译所有内容)。现在您已经拥有了已发布的游戏。但是一些 DIYer 想要在游戏中添加一些新卡(他们无法更改可执行文件本身,因为如果有多个 DIY 怎么办?)。您可以通过 txt 或 db 或其他方式完成卡片数据部分,但对于“效果”部分,您必须对其进行编码并将其编译为某种东西。编译库中主程序应该如何调用卡片“效果”函数?
顺便说一句,我知道我可以使用诸如 LUA 之类的 sript 语言或其他语言来做到这一点,但是如果我想用“编译方式”来做到这一点呢?
这里是更具体的例子:
A.cpp: int main(){ FuncA();函数B();函数C(); ... } // 和别的东西
B.cpp: int TheFunction(){ .... } // 就是这样
该程序不知道“B”的存在,但它被设计成如果我可以将B编译成某种B.so,并将其放在指定的文件夹中,“A”可以执行TheFunction ()
我知道这个声音真的很实用,但我正在考虑以下几点:
在编译 B 时,使用某种方法让编译器生成某种指向 txt 文件的函数指针列表。程序 A 读取该文件,并运行 B 中指针指向的函数。
这可能吗?还是我实际上理解错了什么?
【问题讨论】:
-
了解微软的 COM:en.wikipedia.org/wiki/Component_Object_Model。
标签: c++ compilation