首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将C中的.dll导入Fortran

问将C中的.dll导入Fortran
EN

Stack Overflow用户
提问于 2022-08-25 07:18:37
回答 1查看 62关注 0票数 0

我想将用C编写的.dll调用到我的Fortran代码中。我知道有人问过类似的问题,但答案似乎对我不起作用。我试着读这个文件如下:

代码语言:javascript
复制
 use, intrinsic :: ISO_C_Binding 

..。

代码语言:javascript
复制
 ! ------------------------- including the controller-.dll -------------------------------
   interface 
        subroutine Controller ( data, status, infile, out, msg)  bind (C, NAME='Controller .dll') 
            use, intrinsic :: ISO_C_Binding
    
             real(C_FLOAT),          intent(inout) :: data(*)        
             integer(C_INT),         intent(inout) :: status 
             character(kind=C_CHAR), intent(in)    :: infile(*)      
             character(kind=C_CHAR), intent(in)    :: out(*)     
             character(kind=C_CHAR), intent(inout) :: msg(*)        
       end subroutine controller
    end interface 

语法似乎是正确的,因为我没有收到任何错误消息。但是当我试图调用子例程时:

代码语言:javascript
复制
call Controller(ctrl_data,ctrl_status,ctrl_infile,ctrl_out,ctrl_msg)

我得到错误消息"error LNK2019:引用函数“MAIN_STRUCTURE.main_structure.obj中未列出的外部符号"Controller”。

此外,我不完全确定把Contoller.dll放在哪里。为了确保可以找到它,它与源代码在同一个文件夹中,也在工作存储库中。

我正在使用ifort编译器和Visual 2019。

我期待着所有的答复。提前谢谢你。

大卫

EN

回答 1

Stack Overflow用户

发布于 2022-08-25 10:05:29

我认为有三个问题:

  • 你试图调用的C例程不太可能被命名为"Controller.dll“。name in bind(C,name="...")应该是您试图从DLL调用的函数的名称,而不是DLL文件的名称。

如果要静态地将库链接到您的程序,则需要导入库,而不是文件。有关如何导出定义并从.DLL文件构建导入库文件的方法,请参见

  • 最后,您需要确保导入库在项目中被正确设置,因为LNK2019错误意味着链接器找不到它。如果上述所有项目都正常,则需要确保将导入库文件的路径添加到项目的依赖项中(在Visual :Properties->Linker->Input-> Dependencies)

中)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73483390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档