簡體   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