C 呼叫 Fortran 寫的演算法庫的問題

2021-06-06 12:55:20 字數 769 閱讀 1301

今天將自己用fortran寫的演算法庫掛在c#中,執行時老是出現棧被破壞的錯誤但是

c++呼叫演算法庫的時候是沒問題的啊!

後來找啊找終於發現是c#執行緒的堆疊不夠導致的!

thread 建構函式 (threadstart, int32)

引數start 

型別:system.threading.threadstart

threadstart 委託,它表示此執行緒開始執行時要呼叫的方法。

maxstacksize 

型別:system.int32

執行緒要使用的最大堆疊大小;如果為 0 則使用可執行檔案的檔案頭中指定的預設最大堆疊大小。

maxstacksize 可以自己指定這個值

實際上就是呼叫windows的api 

handle winapi createthread(

__in_opt lpsecurity_attributes lpthreadattributes,

__in size_t dwstacksize,

__in lpthread_start_routine lpstartaddress,

__in_opt lpvoid lpparameter,

__in dword dwcreationflags,

__out_opt lpdword lpthreadid);

我把maxstacksize改大後就執行正常了!

哦   還有乙個非常重要的問題是:只能用序列的mkl庫,不能用並行的mkl庫!否則又會出錯

C 呼叫Fortran的動態鏈結庫

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

C 呼叫C 寫的DLL

方法有不少,這裡記錄其中的乙個方法。編譯 呼叫通過了的。期間遇到的問題是c 呼叫時傳遞string型別的引數和返回值會報錯。targetinvocationexception異常,值不在範圍內,記憶體不可訪問等等。解決方法是 在c 的dll中將string型別的引數返回值改為lptstr型別。在c ...

C 演算法庫(algorithm)

演算法庫需要標頭檔案 include 返回函式 x 和 y 的最大值。include include using namespace std intmain 返回函式 x 和 y 的最小值。返回值為 x 的絕對值,必須為整數。如果是浮點數的絕對值使用 math.h 中的 fabs 交換 a,b 的值...