掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Fortranで作成したDLL内の2次元配列を動的配列で受け渡せない (ID:38054)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
はじめまして. Fortranで作成した数値計算プログラムのインターフェイスを,exe単体で使用できるDelphiで作成したいと思い,最近使い始めました. 使用コンパイラのVersionは,以下です. Delphi6 Personal Edition(Build6.240,Update Pack2) Compaq VisualFortran 6.6C Delphiから,Fortranで作成したDLL内のサブルーチンを呼び出して使用したいのですが,2次元の動的配列の受け渡しがうまくいかず,困っています. 色々と調べたつもりなのですが,うまくいきません. 以下のように,動的配列を宣言して使用すると, TIntMatrix = array of array of Longint; IDE上で配列imxの中身を追うと, imx((0,0,0),(0,0,0),(0,0,0))→imx() と表示されました. 以下のように,固定長配列とすると,うまくいきます. TIntMatrix = array[0..2, 0..2] of Longint; 配列imxの中身は, imx((0,0,0),(0,0,0),(0,0,0))→imx((0,0,0),(0,1,2),(0,2,4)) となりました. ------- 定義部におけるDLL利用部分(Delphi) ------- implementation {$R *.dfm} type TIntMatrix = array of array of Longint; procedure TestMatrixDll(imn, imx, jmn, jmx: Longint; var idat: TIntMatrix); stdcall; external 'Fortran_dll.dll' name 'TestMatrixDll'; ------- DLL利用procedure内の記述(Delphi) -------- var imx: TIntMatrix; begin SetLength(imx, 3, 3); TestMatrixDll(0, 2, 0, 2, imx); end; ------- DLL側のSUBROUTINE(Fortran) -------- SUBROUTINE TestMatrixDll(mmin, mmax, nmin, nmax, marray) !DEC$ ATTRIBUTES STDCALL, DLLEXPORT :: TestMatrixDll !DEC$ ATTRIBUTES ALIAS : "TestMatrixDll" :: TestMatrixDll !DEC$ ATTRIBUTES REFERENCE :: marray IMPLICIT NONE INTEGER(4), INTENT(IN) :: mmin, mmax INTEGER(4), INTENT(IN) :: nmin, nmax INTEGER(4), INTENT(OUT) :: marray(mmin:mmax, nmin:nmax) INTEGER :: i, j DO j = nmin, nmax DO i = mmin, mmax marray(i, j) = i * j END DO END DO RETURN END SUBROUTINE TestMatrixDll ポインタを使ってみようと考え, PIntMatrix = ^TIntMatrix; TIntMatrix = array of array of Longint; と宣言してprocedure定義,呼び出し部もPIntMatrixとしてみましたが,うまくいきませんでした. ちなみに,1次元の配列だと,同様の使い方でうまく動的配列も使用できました. 以上,よろしくお願いいたします.
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.