访问结构内容,当类型及其内容在不同的DLL之间变化时

时间:2012-06-26 07:55:35

标签: c++ dll

我有这些项目,我需要连接几个代码生成的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文件,我需要包含一个新的头文件,使用相关的结构类型创建一个新的Model实例,并使用结构的成员定义一个新的枚举。 ..因此,dll中的动态有点丢失。

现在我知道C ++没有反射,但我希望提示至少能够简化利用dll内容的过程。


我希望我已经清楚地解释了这个问题,我将非常感谢答案的任何答案或指示!

1 个答案:

答案 0 :(得分:0)

至少,您需要要访问的dll的头文件。知道变量的结构或内容没有通用的方法。即使使用头文件,您也可能会被编译器实现之间的实现定义差异所困扰,甚至在编译DLL时只是编译器开关处于活动状态。

简而言之:没有安全的方法可以做你想做的事。

如果DLL意味着您访问私有变量的成员,它应该为您提供访问器函数来获取和设置各种值。