使用DLL

时间:2015-11-18 19:08:23

标签: c function external modelica dymola

我正在使用两个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?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

库是否同时具有DLL和LIB文件,还是只有DLL?

如果有一个LIB文件,Dymola将与之链接 - 它可能导致上述问题,但如果没有LIB文件,Dymola 2016应该直接转到DLL。

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