1

整数、シングル、ダブル、およびこれらすべての配列を問題なく前後に渡すことができます。しかし、VisualBasic2010の文字列をFortranDLLの文字変数に渡す方法がわかりません。エラーが発生し続けPInvokeStackImbalanceます。Visual Basic文字列を各文字のASCIIコードを含む整数配列に変換し、それを送信してDLL内に戻すこともできますが、それは哀れです。これを行う簡単な方法が必要です。

最初Dim txt(50) as CharにVB2010とDVFF90DLLで使用してみまし character*50 txtたが、機能しませんでした。

次にDim txt as String、Visual Basic 2010で文字列を50文字の長さにしました(49文字も試しました)が、これは機能しませんでした。

他の誰かがファイル名などをDLLに渡したいと思っていることを願っています。

4

2 に答える 2

1

まあ私はC#でそれをやったし、それは簡単だった:

FORTRAN コード (Compaq Visual Fortran)

SUBROUTINE TEST_STR(A, N)
!DEC$ ATTRIBUTES DLLEXPORT :: TEST_STR
!DEC$ ATTRIBUTES ALIAS:'TEST_STR' :: TEST_STR
!DEC$ ATTRIBUTES VALUE :: N
    INTEGER*4, INTENT(IN) :: N
    CHARACTER(LEN=N) :: A

    PRINT '(1X,A)', "STRING RECEIVED:"
    PRINT '(1X,A8, A50)', "VALUE=", A

END SUBROUTINE

.NET コード (C# 2008)

[DllImport("mathlib.dll")]
static extern void TEST_STR(string A, int n);
...
string S = new string('@', 50);
TEST_STR(S, S.Length);

しかし、変更を加えて文字列を返すことはできません (まだ)。たぶん、これで十分です。

于 2011-08-03T19:00:04.813 に答える
0

<MarshalAs(UnmanagedType.LPStr)>P/Invoke で指定してみましたか?

Public Declare Auto Sub YOUR_SUB Lib "YOUR_DLL.Dll" (<MarshalAs(UnmanagedType.LPStr)> YOUR_VARIABLE As String)

詳細はこちら:

http://msdn.microsoft.com/en-us/library/s9ts558h%28VS.71%29.aspx

http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshalasattribute%28VS.80%29.aspx

于 2011-08-03T17:12:14.297 に答える