c语言调用fortran dll,dll - 从Fortran程序中的DLL调用子例程 - 堆栈内存溢出

我希望在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

是使我的代码运行所需的一切。 代码的行为类似于现在的样子。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值