問題タブ [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.
c - 再帰的な C 構造体の Fortran への移植
Fortran でこの再帰的な C 構造体を定義する正しい方法は何ですか?
私はこの Fortran コードを書きました:
bind(c)
これはコンパイルされますが、型定義が欠落しているため、間違っていると思います。type, bind(c) :: OPTION
gfortranを使用しようとすると、 Error: Component 'next' at (1) cannot have the POINTER attribute because it is a member of the BIND(C) derived type 'option' at (2)
.
そして、属性を保持type, bind(c) :: OPTION
して削除すると、.POINTER
Error: Component at (1) must have the POINTER attribute
c - Fortran 90 で返された C 浮動小数点ポインターからデータを取得できない
Fortran 90 プログラムから C 関数を呼び出しています ( Fortran 90 を使用する必要があります)。この C 関数は、いくつかの引数を取り、浮動小数点ポインターを返します。返されたデータを Fortran コードで正しく出力できないようです。非常に大きな数値が表示されるだけです(これはポインターのアドレスだと思います)。
REAL Fortran 変数を引数として渡し、C 関数でそれらを設定し (Fortran が参照渡しするように)、データにアクセスすることに成功しました。ただし、これはレガシー関数が使用するメソッドであるため、ポインターを戻り変数として返す必要があります (これを再実装しています)。
Fortran 90 で、C 関数から返された非文字 (実数、整数など) ポインターからデータにアクセスする方法はありますか? (注: ISO C バインディングは Fortran 2003 以降専用であるため、使用できません。) 以下に、何をしようとしているのかについてのアイデアを示しました...
ありがとう!
Fortran プログラム
C 関数
出力
pointers - Fortran 未処理例外 (msvcr100d.dll)
プログラムを終了すると、この未処理の例外が発生します。
デバッガーは、次の行の crtdll.c というモジュールで停止します。
コール スタックの一番上の行は次のとおりです。
msvcr100d.dll!__clean_type_info_names_internal(__type_info_node * p_type_info_root_node=0x04a6506c) 行 359 + 0x3 バイト C++
その後、プログラムは IDE を閉じるまでメモリに残ります。
私はマネージ言語での開発に慣れているので、コードのメンテナンスに何か問題があると思います。コード自体は、メモリ マップされたファイルを読み取り、それをポインターに関連付けます。
c-pointer の使用が終わったら、その c-pointer の割り当てを解除する必要がありますか? 私はそれを調べましたが、Fortranでそれを行う方法がわかりません...
助けてくれてありがとう!
c# - Fortran から C# を呼び出す
Fortran からの C# の呼び出しについて説明しているスタック オーバーフローに関する投稿は見つかりませんでした (Intel Visual Fortran もインストールされた Visual Studio 2010 を使用しています)。ただし、 Fortran からの C/C++ の呼び出しについて説明している (非常に) 限られた数の投稿[ 1、2、3 ]があります。
これらの投稿への回答の 1 つで、Fortran から C++ を呼び出すのは C を呼び出すよりもトリッキーであることが示唆されました。C/C++/C# の基礎が欠けているので、C/C++ 用に作成された手順が C# に適用できるかどうか疑問に思っています。
これらの投稿で気付いた共通点の 1 つは、ISO_C_BINDING という組み込みモジュールが必要であるということです。ここでそれについてもう少し読んだ後、ISO_C_BINDING を使用すると、C# で記述された (DLL としてコンパイルされた) プログラムに 2D 配列に相当する情報を渡し、いくつかの「イベント」を呼び出すことができるかどうかがわかりませんでした。 (関数に似ていますか?)、最後に C# から 2D 配列の情報を取得してから、Fortran での私のビジネスに移ります。
Fortran と C# の両方に精通している場合は、ISO_C_BINDING がそのタスクに適しているかどうか教えてください。上に挙げた情報からは、そのような感覚は得られませんでした。C#と Fortranの間で配列を渡したり、Fortran からC#関数を呼び出したりする実際の例を誰かが持っている場合は、どのように進めるかのテンプレートとしてそれを調べる機会をいただければ幸いです。ありがとう、エリック
c - fortran の c ヘッダーで定義された構造体を使用するには?
構造体を定義する *.H があります。このような:
void c では、データファイルのすべてのパラメータに値が割り当てられます。TYPE を使用して再定義せずに、割り当てられた値をメインの Fortran プログラムに渡したい。*.H と iso_c_binding を呼び出すだけです。つまり、すでに*. H. 誰かが何か提案していますか?
どうもありがとう!
python - コンパイルされた拡張機能を使用した Python のデバッグ
iso_c_binding
私は、コンパイル済みの Cython および Fortran 拡張 (最新の Fortran のモジュールと Cythonを使用してラップされたもの) を備えた Python を使用して、数値計算を行います。
これまでのところ、便利なデバッグ戦略はありません。pudb
Python部分に使用します。プロジェクトの Cython と Fortran の部分で gdb を使用できるかもしれませんが、print()!
代わりにコンソール テキスト出力 ( ) を使用していることに気付きました。
さまざまなレベルのコードをデバッグ用に透明にするツールがあるかどうかを知りたいです。つまり、Python をステップ実行するかどうかを気にしない「1 つのツールですべてをデバッグする」ソリューションを探しています。 Cython または Fortran コード。
前述の pudb など、ユーザーフレンドリーな対話を可能にするツールを好みます。そのような何でも屋のデバッグ ツールは存在しますか? 私が得ることができる最高のPythonモードですか?GDB
c++ - Fortran から C++ 関数に配列を渡す
私はFortranでメインプログラムを持っています。Visual Studio 2010 で Intel Visual Fortran XE 2011 を使用しています。C++でコーディングされた関数を使用したいと考えています。私が使用している関数は、いくつかの配列 (入力 - メインの fortran プログラムから設定) を取得し、それらを使用して出力配列を形成します (メインの fortran プログラムに返されます)。次の手順を実行しました。
1) Fortran のメイン プログラムとモジュールを使用して Fortran プロジェクトを作成し、それを "スタートアップ プロジェクト" として設定しました。
2)「スタティック ライブラリ」タイプの C++ プロジェクトを作成しました。
$(IFORT_COMPILERvv)\compiler\lib\ia32
3)ここで説明したように追加しましたhttp://software.intel.com/en-us/articles/configuring-visual-studio-for-mixed-language-applications
C++ スタティック ライブラリは問題なくビルドされています。real(8)
私が得るエラーは、fortran プログラムの変数の宣言に関するものです。
すべての real(8) 宣言に対して次の 2 つのエラーが発生します。つまり、合計で 6 つのエラーが発生します。
エラー #5082: 構文エラー、次のいずれかを期待しているときに '(' が見つかりました: :: %FILL 、TYPE BYTE CHARACTER CLASS DOUBLE DOUBLECOMPLEX DOUBLEPRECISION ...
エラー #5082: 構文エラー、次のいずれかを期待しているときに '::' が見つかりました: ( * , ; [ / = =>
使用したコードは次のとおりです。
主な Fortran プログラム:
C++ 関数は次のとおりです。
誰でもこの問題で私を助けてもらえますか? また、配列全体を Fortran プログラムから C++ ルーチンに送信するという考えが安全か、または問題のある (避けたほうがよい) 試みであるかを教えてください。
fortran - 関数戻り派生型での gfortran と ifortran の異なる動作
Fortran で派生型の属性のメモリ アドレスを格納する必要があるプロジェクトに取り組んでいます。gfortran で見つかったものは、戻り値が派生型の場合、関数の戻り値の暗黙のコピーがあります。だから私が保存したアドレスは無意味です。コードの一部があります:
gfortran を使用した出力は次のとおりです。
ifort を使用した出力は次のとおりです。
結果が一貫しているように、gfortranでそのようなコピーを回避する方法はありますか? フォートランを習い始めたばかりです。関数の記述子またはコンパイラのオプションがある場合があります。