我一直試圖從C++傳遞一個字符數組到Fortran子例程,但它好像Fortran沒有正確接收字符。我一直在尋找網絡尋找解決方案,但提出的想法似乎太複雜了。 Steve在Intel Fortran Forum提出了一個有趣(簡潔)的解決方案,但是我無法在我的代碼中使用它。所以,我感謝任何建議,幫助我解決這個問題。將C++字符數組傳遞給Fortran
下面的函數是我的C++程序,使調用FORTRAN子程序:
extern "C" void __stdcall F_VALIDATE_XML(const char* buffer, int len);
void CUDMEditorDoc::OnValidateXML()
{
CString fileName = "test.udm";
const char* buffer = fileName.GetBuffer();
int len = fileName.GetLength();
F_VALIDATE_XML(buffer, len);
}
這裏是一個應該接收字符數組的Fortran子程序:
subroutine validate_xml(file_name, len)
!DEC$ ATTRIBUTES DECORATE, STDCALL, ALIAS:"F_VALIDATE_XML" :: validate_xml
use xml_reader_structure
use, intrinsic :: ISO_C_Binding
integer(C_INT), value, intent(in) :: len
character(len, kind=C_CHAR), intent(in) :: file_name
integer :: i
i = 1
end subroutine validate_xml
在調試模式和當程序停在行(i = 1
)時,我將鼠標懸停在file_name
上查看其內容,但Watch窗口顯示它找不到file_name
符號(儘管len
是corr實際通過)。另外,如果我在觀看窗口中觀看file_name(1:8)
,我仍然沒有得到原始字符數組。我相信將參數傳遞給Fortran的方式有些問題,但觀察窗口的機會不正確。
我很感激任何幫助,可以在這裏擺脫一些燈。 謝謝