繁体   English   中英

使用DLL的Modelica外部C函数调用

[英]Modelica External C function call using a DLL

我通过两个DLL在Dymola中使用了两个外部函数。 我遇到了一个问题,使我开始思考编译器实际上是如何找到外部函数的。 因此,两个不同的DLL中的函数具有相同的名称以及相同的输入和输出变量集,但它们执行的任务不同。

void Execute(int in_1, bool flag_in, bool* flag_out, int* out_1);

我在Modelica的外部函数接口中将它们定义如下:

function testFunc1 

  input Integer in_1;
  input Boolean flag_in;
  output Boolean flag_out;
  output Integer[5] out_1;

  external C Execute(int in_1, bool flag_in, bool* flag_out, int* out_1)   
  annotation(Library = "DLL1");
end testFunc1;

就像上面一样,第二个函数在另一个名为testFunc2的modelica函数中被调用。 我观察到的是,由于外部函数具有相同的名称以及相同的输入和输出变量集,尽管定义了库名称,但编译器仍会错误地从另一个DLL中选择错误的函数并执行该函数。

我想知道是否有一种方法可以强制编译器在寻找外部函数时仅查看特定的DLL? 还是外部函数根本不应该具有相同的名称? 还是有更好的方法将DLL引入Modelica?

如果确实需要将符号命名为同一对象,请使用win32 API中的LoadLibrary等。 否则,您应该为函数提供唯一的名称,以实现跨工具和跨平台的兼容性。

该库是否同时具有DLL和LIB文件或仅具有DLL?

如果存在LIB文件Dymola将与之链接-则可能会导致上述问题,但如果没有LIB文件Dymola,则2016年应直接进入DLL。

但是使用不同的名称通常更简单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM