我试图在Fortran中编写一些可以在Excel中访问的数字功能。我正在使用Office 2013(64位),Visual Studio 2015和#34;社区"和英特尔Fortran(英特尔Parallel Studio XE 2017);我能够正确编译可执行程序。我也能够生成DLL文件,我认为这是正确的。
这是我从this tip开始研究的最小Fortran代码示例:
function id(x)
!DEC$ ATTRIBUTES DLLEXPORT :: id
integer :: id, x
id = x
return
end function
我在Sheet1的VBA代码下的Excel端有这个:
Option Explicit
Option Base 1
Public Declare PtrSafe _
Function id Lib "mydll.dll" _
(ByVal x As Integer) As Integer
通过这样做,我设法在Excel中使用公式栏自动完成函数名称,但是评估任何实例会导致单元格暂时闪烁0然后转为#VALUE!。
我在组合/货物崇拜方式中尝试了很多东西:使用ByRef
代替ByVal
,函数只使用整数或单精度(真* 4)或双-precision(real * 8)浮动,然后是那些没有意义的东西。
我终于用完了随机密钥组合进行混搭,并且很少有消息来源涵盖这个确切的用例。如果我必须把它归结为更精确的事情而不是"接下来要做什么":
答案 0 :(得分:1)
您似乎并未意识到英特尔Fortran提供了几个连接Excel / VBA和Fortran的实例。从https://software.intel.com/en-us/product-code-samples下载适用于Windows样本包的英特尔Parallel Studio XE。在ZIP文件中,compiler_f \ MixedLanguage \ Excel可能是与您最相关的一个。一个重要的方面是来自VBA的任何调用都需要在被调用的例程端指定STDCALL调用机制,否则你将得到堆栈损坏。
答案 1 :(得分:0)
以下是英特尔可视Fortran帮助文件的摘录。
Declare Sub FortranCall Lib "C:\Temp\Fcall.dll" (r1 As Long, ByVal num As String)
在excel方面,他们使用了:
Panel title = <%=this.panelLayout%>
最好通过不同的输入和输出来获取更多示例来帮助用户。