C 呼叫Fortran的動態鏈結庫

2021-09-29 04:19:31 字數 943 閱讀 2694

由於在前一段時間做乙個課程設計,老師提供了乙個函式的fortran原始碼。雖然聽說c和fortran可以混合程式設計,但由於本人不會fortran,就選擇了將fortran的原始碼編譯成動態鏈結庫,並在c++中呼叫。

fortran編譯動態鏈結庫

*vs2019

在ivf安裝完成之後,在vs2019中新建fortran動態鏈結庫專案,在想要輸出到庫函式的子程式下新增

!dec$ attributes dllexport::functionname
subroutine myprint(x)

!dec$ attributes dllexport::myprint

print *,x

end subroutine

執行生成之後,便會在相應的路徑下得到.lib檔案和.dll檔案

c++呼叫fortran動態鏈結庫

首先是隱式呼叫

#pragma comment(lib,"test.lib")

extern "c" void _cdecl myprint(double *x);

int main()

由於在c++中使用c語言的呼叫約定所以需要extern "c",c語言中有兩種堆疊管理方式分別為_stdcall和_cdecl,

_stdcall:引數由右向左壓入堆疊,堆疊由函式自己清理。

_cdecl:引數由右向左壓入堆疊,堆疊由呼叫方清理。

預設msvc是_stdcall的方式,fortran是_cdecl,因此有必要在此宣告其堆疊管理方式。

其次是顯示呼叫

#include int main()

注意:呼叫方的程式位數與版本需要與庫保持一致

C 呼叫C 動態鏈結庫dll

在過程中發現兩種方法解決問題 一種是非託管c 建立的dll庫,需要用靜態方法呼叫。這種方法無法在c 的reference中直接引用,而是要用靜態呼叫的方法,其他部落格已經介紹的很詳盡,唯一需要補充的是,c 檔案需要先 usingsystem.runtime.interopservices 之後才可以...

Python呼叫C 動態鏈結庫

1 安裝vs2010,或者以上的版本 2 建立win32應用程式,應用程式型別選擇dll。由於python是64位的,因此需要將win32程式設定為x64,即64位的。3 編寫程式add.cpp 4 編寫標頭檔案add.h。由於 比較少,也可以申明直接放在add.cpp中,此處為了規範,還是分開寫的...

C 生成 呼叫動態鏈結庫

一 需求描述 1 用 生成動態鏈結庫 2 用c 呼叫動態鏈結庫 二 生成動態鏈結庫 1 新建類庫 2 新增welcomeinfo類 如下 僅供測試用,例子很簡單 1 using system 2using system.collections.generic 3using system.linq 4...