問題タブ [fortran-iso-c-binding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1930 参照

c - C_F_POINTER が未定義の配列になる

this this question から ISO_C_BINDING にコードを変更しようとしましたが、C_F_POINTER 呼び出しにより未定義のポインター/配列 (VS2010 デバッガー) が発生し、print*, f_arr(i)セグメンテーション違反がトリガーされます。array interop の指示に厳密に従っていると思います。

main.c

sub.f90

ポインター変換で失敗する理由を知っていますか? (インテル Fortran コンパイラ)

0 投票する
1 に答える
171 参照

c - C を使用して IDL から fortran を呼び出す

たくさん検索した後、質問を投稿することにしました。

いくつかの配列 (1D および 2D) を IDL から fortran ルーチンに渡す必要があります (私は「現代の fortran」プログラマーです)。IDL は列優先の言語であり、fortran サブルーチンを呼び出す前にすべての配列を割り当て済みです。

問題は、IDL が C 関数に何でも渡すことができることですが、配列を fortran に渡す非標準的な方法が実行可能です (例: http://132.248.1.102/~morisset/idl_cours/IDL/fortran.htm)。配列と構造体のすべての引数は、IDL 関数 CALL_EXTERNAL ( http://www.exelisvis.com/docs/CALL_EXTERNAL.html )を使用して参照によって渡されます。

ISO_C_BINDINGS を使用して 1D および 2D 配列を処理する fortran ラッパーを探しています。私の fortran サブルーチンには、次のものと同じインターフェイスがあります (数学は少し複雑です)。

多くの良い答えを見つけましたが、2D 配列を渡す標準的な方法を探しています。y_out 配列を割り当てたり割り当て解除したりする必要はなく、値を入力するだけです。配列の次元に関するすべてのチェックは、fortran_sub_array を呼び出す前に IDL で既に行われています。

0 投票する
1 に答える
479 参照

c - Fortran整数配列をCサブルーチンに渡す最初の要素のみが渡される

Fortran から C に整数配列を渡そうとしていますが、配列の最初の要素しか渡すことができません。

エラーを再現する以下のテストプログラムがあります。どこが間違っていますか?

0 投票する
1 に答える
384 参照

c# - Fortran (呼び出し先) から C# (呼び出し元) に配列ポインターを渡す

float 配列を C# から fortran に渡そうとしていますが、fortran が内部 (fortran コード内) 配列への参照を変更するようにしています。うまく動作しますが、そうするとゴミが出てきます。以下は私がすることです:

なんで?レガシ コードを dll にしているので、必要以上に変更したくないからです。何か案は?


承認された回答といくつかの変更を使用した更新このコードは、C#:"test" が fortran:"arrayin" の値をターゲットにすることに成功しました

0 投票する
0 に答える
322 参照

c - Fortran/C Mixing : Fortran で動的に割り当てられた C 配列にアクセスする方法は?

現在、メモリの問題が発生しています。C/C++ サブルーチンを呼び出していくつかのタスクを実行し、動的に割り当てられた配列にデータを格納する Fortran でコーディングされたメイン プログラムがあります。問題は、Fortran のメイン プログラムに戻ったときに、これらのデータにアクセスできる必要があるということです。Fortran で配列を指す C ポインター (TYPE(C_PTR)) を宣言しようとしましたが、うまくいかないようです。配列は C サブルーチン内にありますが、メインの Fortran プログラムに戻ってアクセスしようとすると、segfault が発生します。ここにコードを示します。何かアイデアはありますか? 助けてくれてありがとう!!

フォートラン:

C サブルーチン:

出力: