私はこれについて約 1 週間待たされており、C から FORTRAN に char* を送信する方法の明確な説明を求めて、次から次へとフォーラムを検索しました。さらに苛立たしいことに、FORTRAN から C に char* 引数を送信するのは簡単でした...
FORTRAN から C に char* 引数を送信する (これは問題なく動作します):
// 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* を返そうとすると、次々と問題が発生します。私がうまくいくはずだと感じた1つの試みは次のとおりです。
// 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
(DIMENSION(*) は文字通り使えないので、255 にオーバーサイズしました。)
これは 255 個の C スタイル文字の配列へのポインターを返すはずですが、もしそうなら、これを意味のある文字列に変換できませんでした。実際には、Wingdings から「ベル」の文字まで、ランダムな文字セットを返します...
私も返そうとしました:
- CHARACTER(LEN=255, KIND=C_CHAR) へのポインター。
- 文字通り CHARACTER(LEN=255, KIND=C_CHAR)。
- INTEGER(C_SIZE_T) であり、それを文字列配列へのポインターに精巧にしようとしました。
- キャラクター。
- 等
誰かがこれを行う方法の例を教えてくれれば、とても感謝しています...
よろしくお願いします、
マイク