- PR -

vb2005 の文字配列を Fortran に渡す方法につきまして、

1
投稿者投稿内容
ACU
会議室デビュー日: 2008/11/30
投稿数: 3
投稿日時: 2008-11-30 13:56
初めまして、おせわになります。

Visual Fortran 10 でDLLを作成しvb2005 から Callするプログラムを作ろうとしています。
そこで、vb2005からFortranに文字配列を渡したいのですが、文字配列だけ受け渡すことが出来ません。それ以外、文字列・実数・整数や配列は問題なく渡せています。
文字配列を受け渡すことは不可能なのでしょうか?
どうぞよろしくお願いいたします。 
にー
常連さん
会議室デビュー日: 2006/04/30
投稿数: 35
投稿日時: 2008-11-30 23:49
ここにあるのが参考になると思いますが、如何でしょう。

http://www.xlsoft.com/jp/products/intel/cvf/docs/vf-html/pg/pg18_05_01.htm
ACU
会議室デビュー日: 2008/11/30
投稿数: 3
投稿日時: 2008-12-02 17:16
にーさん サイトのご案内ありがとうございました。
その後、色々と調べ、また試してみました。どうも、配列は渡されているようですが、
文字配列の1つ目以外の文字列が異なってしまいます。以下に示します例ですと'A’
だけが渡され、'B'と'C'は化けてしまいます。原因が分かりましたらご指導ください。
よろしくお願いいたします。

Declare Sub FortString1 Lib "..\\..\\Fcall\\Debug\\FCALL.DLL" (ByVal S As String, ByRef L1 As Integer)

'VisualBasicの部分

Dim S(3) As String
S(1) = "A"
S(2) = "B"
S(3) = "C"

Call FortString1(S(1), S.Length - 1)

!VisualFortranの部分

Subroutine FortString1 (S,L1)
!DEC$ ATTRIBUTES DLLEXPORT, ALIAS : "FortString1" :: FortString1

CHARACTER S(L1)

RETURN
END
Tram
常連さん
会議室デビュー日: 2002/10/10
投稿数: 21
お住まい・勤務地: 横浜
投稿日時: 2008-12-02 17:52
引用:

ACUさんの書き込み (2008-12-02 17:16) より:
Declare Sub FortString1 Lib "..\\..\\Fcall\\Debug\\FCALL.DLL" (ByVal S As String, ByRef L1 As Integer)


この部分ですが、ByVal S As String の ByVal を ByRef にしてみたらどうなりますか?
ACU
会議室デビュー日: 2008/11/30
投稿数: 3
投稿日時: 2008-12-02 18:08
Tramさん どうもありがとうございます。
早々に試してみましたところ、文字化けしてしまい、
毎回その文字化けの文字が変わってしまいます。
なかなか、難しいです!文字配列というのは特殊なのでしょうか?
Tram
常連さん
会議室デビュー日: 2002/10/10
投稿数: 21
お住まい・勤務地: 横浜
投稿日時: 2008-12-02 18:25
引用:

ACUさんの書き込み (2008-12-02 18:08) より:
Tramさん どうもありがとうございます。
早々に試してみましたところ、文字化けしてしまい、
毎回その文字化けの文字が変わってしまいます。
なかなか、難しいです!文字配列というのは特殊なのでしょうか?


ダメでしたか。失礼しました。
配列渡しの例を見ると以下のように定義されています。
コード:
Declare Sub FortArray1 Lib "forttest" (A1 as Long, NumElem as long)
Dim A1(1:3) as Long
Call FortArray1(A1(1), 3)


VB6などではByValやByRefを明記しない場合はByRef扱いだと記憶していたので
もしかしてと思いましたが、外していましたね。
というか、そもそもACUさんはVB2005からの呼び出しでしたね…よく見ておらず失礼しました。
1

スキルアップ/キャリアアップ(JOB@IT)