gpt4 book ai didi

c++ - 将字符串数组从 Fortran 传递到 C/C++ DLL 并获取具有更改值的数组

转载 作者:太空宇宙 更新时间:2023-11-04 04:19:55 25 4
gpt4 key购买 nike

我正在创建一个 C/C++ DLL,它接受 char*[](字符串数组),更改数组中的值并返回。

我的 C/C++ 实现:

int doubleijk_(char* data[]) // what should be the return type ???
{
// code to change array elements

return 0;
}

在 Fortran 中(使用 ifort)我这样调用 DLL 的函数:

module variables
type string
character(len=:), allocatable :: str
end type string
end module variables


program Call_CPP
use variables
type(string) :: array(3)
array = [string('xyza'), string('abcd'), string('mnopqrs')]

INTERFACE
! How to write SUBROUTINE for array

SUBROUTINE doubleijk_(arr) BIND(C,NAME='doubleijk_')

!???????WHAT SHOULD BE SUBROUTINE FOR ARRAY OF STRINGS????????

END SUBROUTINE doubleijk_

END INTERFACE

! Body of Call_CPP

call doubleijk_(array)

! print values of array after call

end program Call_CPP

我能够从 Fortran 传递字符串、整数并从 C/C++ 获得更改的值。我需要的是将字符串数组从 Fortran 传递到 C/C++ 并取回具有更改值的数组。我该怎么做?

最佳答案

终于成功了。这是解决方案。

 program Call_CPP
use iso_c_binding, only: c_associated, c_loc, c_ptr

INTERFACE
SUBROUTINE doubleijk_(stringPtrs) BIND(C,NAME='doubleijk_')
use iso_c_binding
TYPE(C_PTR), DIMENSION(3) :: stringPtrs

END SUBROUTINE doubleijk_

END INTERFACE

TYPE(C_PTR), DIMENSION(3) :: stringPtr
CHARACTER(LEN=20), DIMENSION(3), TARGET :: stringArray
DO ns = 1, 3
stringArray(ns) = "My String"//char(0)
stringPtr(ns) = c_loc(stringArray(ns))
END DO

! Body of Call_CPP

call doubleijk_(stringPtr) !Call C function

DO ns = 1, 3
print *, stringArray(ns) !print array after call-changed values
END DO

end program Call_CPP

关于c++ - 将字符串数组从 Fortran 传递到 C/C++ DLL 并获取具有更改值的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47789533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com