visual-studio - 用 Fortran 编写 DLL/从 Excel 调用

标签 visual-studio fortran excel-addins intel-fortran

我正在尝试用 Fortran 编写一些数字功能,稍后可以在 Excel 中访问这些功能。我正在使用 Office 2013(64 位)、Visual Studio 2015“社区”和 Intel Fortran(Intel Parallel Studio XE 2017);我能够正确编译可执行程序。我还能够生成 DLL 文件,我认为这是正确的。

这是我从 this tip 中得出的一个最小的 Fortran 代码示例:

function id(x)
    !DEC$ ATTRIBUTES DLLEXPORT :: id
    integer :: id, x
    id = x
    return
end function

我在 Excel 端的 Sheet1 的 VBA 代码下有这个:

Option Explicit
Option Base 1
Public Declare PtrSafe _
    Function id Lib "mydll.dll" _
    (ByVal x As Integer) As Integer

通过这样做,我设法让 Excel 中的公式栏自动完成函数名称,但计算任何实例都会导致单元格短暂闪烁 0,然后变为 #VALUE!。

我已经以组合/ cargo 狂热的方式尝试了很多东西:使用 ByRef 而不是 ByVal,让函数仅使用整数或单精度(实数* 4) 或 double (real*8) float ,然后是更没有意义的东西。

我终于用完了可以混搭的随机组合键,而且几乎没有资料来源涵盖了这个确切的用例。如果我必须将其归结为比“下一步做什么”更精确的事情:

  • 我遇到的问题是由于数字类型还是与 Fortran 和 Excel 世界之间的“阻抗不匹配”相关的问题吗?
  • 我是否缺少必要的样板、粘合代码等?

最佳答案

您似乎不知道 Intel Fortran 提供了几个连接 Excel/VBA 和 Fortran 的工作示例。从 https://software.intel.com/en-us/product-code-samples 下载适用于 Windows 的英特尔 Parallel Studio XE 示例包。在 ZIP 文件中,compiler_f\MixedLanguage\Excel 可能是与您最相关的一个。一个重要的方面是,来自 VBA 的任何调用都需要在被调用例程端指定 STDCALL 调用机制,否则会出现堆栈损坏。

关于visual-studio - 用 Fortran 编写 DLL/从 Excel 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41353921/

相关文章:

c# - 如何创建或生成 .mlpd 文件以检查 xamarin 分析器中的应用程序性能

visual-studio - Visual Studio 2010 基础服务器 - 我需要域 Controller 吗

interface - fortran中的INTERFACE block 和MODULE过程之间有什么区别?

oop - 抽象类型与同名泛型接口(interface)的关系

office-js - Cookie 不在 Excel 网页版中的任务 Pane 和自定义函数之间共享

visual-studio - VS11 模板是否应该通过 WinRT 应用程序认证工具包?

visual-studio - 为什么 VS2005 中的 Web 应用程序项目提供 'Convert to Web Application' 菜单选项

fortran - 在 Fortran 中读取行数未知的文件

matlab - 使用 Excel GUI 编译 Matlab 应用程序的选项

c# - VSTO 加载项 : Reference in the manifest does not match the identity of the downloaded assembly