我希望在DLL中使用子程序进行研究。 dll是作为黑箱提供给我的,可以在领先的FE软件中使用。
我为dll执行了以下代码
dumpbin /EXPORTS UDSM_HPS.dll > UDSM_HPS.exports
并以下面的子程序结束
2 0 00020D50 _getmodelcount@4
4 1 00020D60 _getmodelname@12
6 2 00020E50 _getparamcount@8
8 3 00020E80 _getparamname@16
10 4 00021AE0 _getparamunit@16
12 5 00001010 _user_mod@124
1 6 00020D50 getmodelcount
3 7 00020D60 getmodelname
5 8 00020E50 getparamcount
7 9 00020E80 getparamname
9 A 00021AE0 getparamunit
11 B 00001010 user_mod
我的兴趣在于' user_mod '子例程。 我使用以下代码从.def文件中创建了一个.lib文件,方法是在文件开头添加'EXPORTS'并隔离子例程名称。
lib /def:UDSM_HPS.def /out:UDSM_HPS.lib
并将.lib文件附加到Visual Studio 2013的“资源文件”中,同时将.dll的副本放置到“调试”文件夹中。
毫不奇怪,编译器看不到“ user_mod”子例程。
现在我的问题是,我是否缺少某些东西,或者从dll中利用子例程的方式是否有所不同?
该dll也是用FORTRAN编写的,我已经用FORTRAN编写了一段简单的FE代码来运行此子例程。
长话短说:非常感谢您提供任何协助,以弄清如何在FORTRAN程序中利用FORTRAN dll。
编辑1:
我正在使用Intel Fortran编译器-Intel(R)Visual Fortran编译器XE 15.0.6.285 [IA-32]。 我曾尝试在Intel(R)Fortran编译器10.1.021 [IA-32]中编译相同的代码,但是没有用。
我打算调用的子例程是
call user_mod(IDTask, iMod, IsUndr, iStep, iTer,&
iEl, Int, X, Y, Z, Time0, dTime, Props, Sig0, Swp0, StVar0,&
dEps, D, BulkW, Sig, Swp, StVar, ipl, nStat, NonSym, iStrsDep,&
iTimeDep, iTang, iAbort)
为了澄清我的模糊句子“编译器未看到”,我的意思是这个错误
错误1错误LNK2019:函数PLAXIS_DLL_INTF interface_files.obj中引用的未解析的外部符号USER_MOD
编辑2:感谢您的所有帮助。 新增中
!DEC$ ATTRIBUTES STDCALL,REFERENCE :: USER_MOD
是使我的代码运行所需的一切。 代码的行为类似于现在的样子。