2016-08-23 98 views
0

我有一些DLL,我想在VISUAL STUDIO的FORTRAN项目中使用,但我找不到。如何将dll链接到fortran(visual studio)?

这是我用来找出如何的简单代码。

使用Visual Studio我创建了一个DLL从这个

subroutine printing 

    !DEC$ ATTRIBUTES DLLEXPORT::printing 
    print*,"dll naimi created" 

    end subroutine printing 

我加的DLL链接到项目>属性>链接>常规>附加库目录

主程序:

program Console11 
implicit none 

call printing 

end program Console11 

错误:Error 1 error LNK2019: unresolved external symbol _PRINTING referenced in function _MAIN__.

other soluti与此相关的ons建议使用在生成DLL时创建的.lib,但在我的真实情况下,我只有没有.lib的DLL。

那么如何使用DLL ...?

+0

Visual Studio开箱即用对Fortran没有任何了解。你正在使用哪种Fortran编译器? – IanH

回答

1

您似乎试图使用DLL作为链接器的输入文件。

(你似乎也试图为一个链接器选项指定一个文件,它需要一个目录为链接器指定一个额外的输入文件,或者将文件添加到项目中,就像附加一个源文件一样,或者使用“Linker> Input> Additional dependencies”项目属性,你在帖子中提到的属性会告诉链接程序在哪里(哪些目录)搜索这些额外的依赖关系。)

与unix约定不同,在Windows上构建可执行文件和其他DLL时与DLL链接。该DLL通常不包含链接器的必要信息 - 而是该信息包含在导入库(这只是典型的.lib静态库的一个变体)或等价物中。

如果您能够成功构建DLL,那么您可能会在与DLL相同的目录中找到该DLL的导入库。将该导入库作为需要该DLL的项目的附加依赖项提供。

当您在Windows上使用导入库链接EXE或其他DLL时,加载可执行代码时操作系统会自动加载目标DLL。这被称为加载时间动态链接。

如果你没有一个DLL导入库,那么你的选择是:

  • 询问是谁建的DLL的导入库的人。

  • 使用运行时动态链接引用DLL,而不是加载时间。这意味着您可以在程序中使用Windows API函数LoadLibrary,GetProcAddress和朋友明确告诉操作系统加载特定的DLL并获取函数指针的地址。如果您使用的是英特尔Fortran,那么完整的示例将随编译器一起安装 - 请参阅文件“C:\ Program Files(x86)\ IntelSWTools \ samples_2016 \ en \ compiler_f \ psxe \ DLL.zip”或类似文件。

  • 从DLL中的最小信息生成一个导入库,以及有关您可能具有的DLL的其他信息。一种方法是编写一个模块定义文件(。def)为DLL,然后使用LIB实用工具将该def文件转换为导入库。一个例子见How to make a .lib file when have a .dll file and a header file

相关问题