我有这些项目,我需要在其中连接几个代码生成的 dll(如果你想知道,来自 MATLAB)。dll 基本上是相似的,假设这两个函数和下面的两个结构是感兴趣的。
function1_ptr = (void(*)(void)) GetProcAddress(libraryHandle, "NAME_function1");
function2_ptr = (void(*)(void)) GetProcAddress(libraryHandle, "NAME_function1");
struct1_ptr = (STRUCT1_TYPE*) GetProcAddress(libraryHandle, "NAME_var1");
struct2_ptr = (STRUCT2_TYPE*) GetProcAddress(libraryHandle, "NAME_var2");
在 dll 之间,它们仅因名称前缀 ( NAME )、结构类型 (*STRUCTX_TYPE*) 和函数内容而异。
加载这些dll的代码的要求是它应该能够运行函数(没问题)并且能够获取和设置两个结构的成员变量(问题!!) (如果他们可以使成员保持不变变化会产生问题)
我的问题是: 考虑到这些(非常松散的)要求,连接这样一个 dll 集合的最简单方法是什么? (如果描述不完整,请发表评论,我会编辑我的帖子)
下面是我对一个我不满意的解决方案的想法......
我当前的代码是这样的:
class Interface
{
virtual void function1(void) = 0;
virtual void function2(void) = 0;
virtual void function3(void) = 0;
virtual void setInput(STRUCT_MEMBERS_ENUM input, double value) = 0;
virtual double getOutput(STRUCT_MEMBERS_ENUM output) const = 0;
};
template <typename STRUCT1_TYPE, typename STRUCT2_TYPE>
class Model : public Interface
{
...
};
这样做的缺点是,如果我想使用一个新的 dll 文件,我需要包含一个新的头文件,创建一个具有相关结构类型的模型的新实例,并使用结构的成员定义一个新的枚举......因为其中,dll中的动态有点丢失。
现在我知道 C++ 没有反射,但我希望得到一个提示,至少能够简化使用我拥有的 dll 内容的过程。
我希望已经清楚地解释了这个问题,我将非常感谢任何答案或答案方向!