我正在构建一系列已编译的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
部分,对吗?
我该怎么办?