我已經在這裏停留了大約一個星期,並且已經在論壇之後搜索了關於如何從C發送char *的清晰解釋的論壇FORTRAN。爲了使事情更令人沮喪,發送一個char *從FORTRAN到C的說法是直線前進...創建FORTRAN接口到一個返回char *的C函數*
發送一個char *從FORTRAN參數C(這工作正常):
// The C header declaration (using __cdecl in a def file):
extern "C" double GetLoggingValue(char* name);
而且從FORTRAN:
! The FORTRAN interface:
INTERFACE
REAL(8) FUNCTION GetLoggingValue [C, ALIAS: '_GetLoggingValue'] (name)
USE ISO_C_BINDING
CHARACTER(LEN=1, KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: name
END FUNCTION GetLoggingValue
END INTERFACE
! Calling the function:
GetLoggingValue(user_name)
當試圖使用類似的邏輯從C返回一個char *,我遇到問題後的問題。我覺得應該工作的嘗試是:
// The C declaration header (using __cdecl in a def file):
extern "C" const char* GetLastErrorMessage();
而且FORTRAN接口:
INTERFACE
FUNCTION GetLastErrorMessage [C, ALIAS: '_GetLastErrorMessage']()
USE ISO_C_BINDING
CHARACTER(LEN=1, KIND=C_CHAR), DIMENSION(255), :: GetLastErrorMessage
END FUNCTION GetLastErrorMessage
END INTERFACE
(我不能隨便使用維度(*),所以我已經過大,以255。 )
This 應該返回一個指向255個C風格字符數組的指針 - 但是如果是這樣,我一直無法將其轉換爲有意義的字符串。在實踐中,它返回一個隨機的字符集,從任何地方宋體的「鍾」字......
我還試圖返回:
- 指向字符(LEN = 255, KIND = C_CHAR)。
- 字面字符(LEN = 255,KIND = C_CHAR)。
- A INTEGER(C_SIZE_T),並試圖將它轉換爲指向字符串數組的指針。
- A CHARACTER。
- 等
如果任何人都可以給我如何做到這一點的例子,我將非常感激......
最好的問候,
邁克
你正在使用什麼工具鏈? – 2012-04-02 08:07:26
我使用VC++編譯器,但在純C中編譯接口。FORTAN是Visual Fortran 2011,我認爲它是FORTRAN 90.但是,這是針對已發佈的API,因此它必須可以從可用的許多種類調用... – 2012-04-02 08:19:15