Fortran Coder

查看: 9418|回复: 5
打印 上一主题 下一主题

[混编] QT调用Fortran 传递字符串问题

[复制链接]

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

楼主
发表于 2019-7-1 17:30:15 | 显示全部楼层
问题有2个:

1. typedef void(*QTsub)(QString b); 应该为 typedef void(*QTsub)(char*);
因为 ba.data() 的返回值就是 char* , 只有这种原生的类型才能混编。
你不能把 QString 传进来,fortran不能解析它。

2. Fortran的虚参没有定义长度,这样就算传进来,也只得到第一个字符“h”


实际上,你这种混编方式非常不规范。(换个编译器可能就不行了)
你可以考虑换一个方式:

[Fortran] 纯文本查看 复制代码
SUBROUTINE SUB(pc,n) Bind(C,Name="sub")
   !DEC$ ATTRIBUTES DLLEXPORT::SUB
   use , intrinsic :: ISO_C_Binding
   integer , value :: n
   type(c_ptr) , value :: pc
   character(len=n) , pointer :: c
   call c_f_pointer( pc , c )
   write(*,*) c
END SUBROUTINE SUB


[C++] 纯文本查看 复制代码
#include "main.h"
#include <QLibrary>

extern "C" {
  typedef void(*QTsub)(char*, int);
}
int main() {
  QString a;  
  QLibrary dll("DLL2.dll");
  if (dll.load()) {
    QTsub sub = (QTsub)dll.resolve("sub");
    a = "hello, World";
    QByteArray ba = a.toLocal8Bit();
    sub(ba.data(),ba.size());
  }
}
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-8 20:24

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表