c++ - 访问结构内容,当不同 DLL 的类型及其内容不同时

标签 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 文件,我需要包含一个新的头文件,创建一个具有相关结构类型的新模型实例,并定义一个具有结构成员的新枚举。 .. 因此,dll 中的动态 有点丢失。

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


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

最佳答案

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

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

如果 DLL 旨在让您访问私有(private)变量的成员,它应该为您提供访问函数来获取和设置各种值。

关于c++ - 访问结构内容,当不同 DLL 的类型及其内容不同时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11202979/

相关文章:

读取数据时c++ undefined variable

c++ - 如何从 D DLL 返回 C 结构?

c++ - 在 64 位系统中分配超过 4GB 的内存

c++ - 如何正确地覆盖从注入(inject)的 DLL 加载到内存中的指令?

C# - dll 引用如何工作?

c++ - Delphi/C++ DLL 问题 - unsigned long 与 unsigned int?

c++ - 如何将数组从行顺序重写为列顺序?

c++ - 表示 vector 引用 vector 的最方便的方法

c# - 将复杂的数据结构从 C# 传递到 native dll

java - JNI2OpenCV 中缺少库?