重命名从dll导入的struct字段

时间:2014-04-30 15:19:22

标签: c++ c dll

我正在构建一系列已编译的Simulink模型的框架(它们是生成C DLL的代码)。在每个dll中都有可用于访问模拟输入和输出的入口点,例如它们可以看起来像这样(来自dll的头文件):

typedef struct {
  Ms_MainBus Ms_MainBus_a;
} ExternalOutputs_vcts_electrical;

但是,尽管所有模型都具有相同的I / O数据结构(Ms_MainBus),但实际的变量名称会发生​​变化,因此例如在另一个dll中,信号可能被称为Ms_MainBus_b而不是Ms_MainBus_a }。这非常烦人,因为我尝试构建一个可以处理大量这些模型的通用框架,并且不需要知道Matlab附加到信号名称的字母。

为了解决这个问题,我尝试了以下方法:

定义了一个结构,其中包含我想要使用的每个模型的信号名称

typedef struct {
   Ms_MainBus MainBus;
} stdInput;

然后我继续将输入和输出变量从dll导入到一个名为Ele的类中。

在Ele.h中,我首先尝试从头文件

覆盖输入结构
#undef ExternalOutputs_vcts_electrical
#define ExternalOutputs_vcts_electrical stdOutput

然后声明输入变量

ExternalOutputs_vcts_electrical (*output);

在Ele.cpp

this->output = (ExternalOutputs_vcts_electrical*)GetProcAddress(this->lib, "vcts_electrical_Y");

它可以工作,我可以访问output.MainBus,但如果我尝试更改模型输入的值,则不会发生任何事情。这就像dll使用的另一个工作区而不是我的代码。在开始这个重命名业务之前我没有遇到过这个问题,所以我猜这个问题出现在#undef, #define部分,对吗?

我该怎么办?

0 个答案:

没有答案