c++ - 将 Fortran 字符串引用传递给 C++ 和 C++ 设置值

标签 c++ fortran

我有一个简单的 Fortran 应用程序,我试图将字符引用传递给 C++ dll 方法,然后让 C++ 方法设置引用字符串,但我无法让它工作。这只是完整代码的一部分,因为我什至无法让它工作。

Fortran 代码

program FortranConsoleExample

implicit none

interface 
    !!!
    subroutine reverseString(str_out, str_in, str_in_len) bind(C, name="ReverseString3")
      USE, INTRINSIC :: ISO_C_BINDING

      integer(C_INT), VALUE, INTENT(IN) :: str_in_len
      character, dimension(*), intent(IN) :: str_in
      character(kind=C_CHAR), dimension(512), intent(out) :: str_out
    end subroutine reverseString
end interface

! Variables
character*512 :: strResult

call reverseString(strResult, "tacobell", len(strResult))
print *, strResult


end program FortranConsoleExample

C++代码

extern "C"
{
    __declspec(dllexport) void __cdecl ReverseString3(char * buff, const char *text, int buffLen)
    {
        buff = "yellow";
    }
}

最佳答案

好吧,如果你写:

void  ReverseString3(char * buff, const char *text, int buffLen)
    {
        strncpy(buff,"yellow", 6);
    }

它将起作用,您必须注意将 Fortran 部分中的字符串初始化为“”,例如:

strResult = " "

看看Assigning strings to arrays of characters

使用指令 buff = "yellow",您已将字符串“yellow”的地址分配给变量 buff,而原始缓冲区保持不变。

关于c++ - 将 Fortran 字符串引用传递给 C++ 和 C++ 设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32784463/

相关文章:

c++ - 在其处理程序中捕获信号的最佳方法

c++ - boost::asio::ssl::context::context(boost::asio::ssl::context_base::method) undefined symbol

c++ - 返回类型协变

fortran - 嵌套循环的 OpenMP SIMD 矢量化

python - 使用 Python 3 导入 f2py 模块时 undefined symbol

fortran - 在 Fortran 中将运行时 if 替换为编译时 if

C++填充矩阵 boost

c++ - 字符串比较 - 替换字符数组中的单词

file - 减少 FORTRAN 中输出文件的大小

fortran - FORTRAN 2003 中的定稿