【发布时间】:2020-02-28 21:41:37
【问题描述】:
我在让简单的 Excel VBA 插件正常工作时遇到问题。我正在使用https://www.vitoshacademy.com/c-adding-c-function-to-vbaexcel/ 的简单示例开始使用,但连这个简单示例都无法正常工作。 SimpleMath.cpp、defMe.def 和 VBA 代码如下。我已添加到 SimpleMath.cpp 属性:链接器:输入:模块定义文件:defMe.def。在 VS2019 中,C++ 代码成功编译并按预期在 Debug 文件夹中生成 SimpleMath.dll。但是我尝试了很多替代方法,但无法让 Excel 中的 VBA 代码正常工作。由于该示例的许多 Web 变体看起来很旧,我想知道 VS2019/C++ 是否需要旧示例中未涵盖的内容?
在 Excel 中我得到“运行时错误 '453': Can't Fine DLL entry point SimpleMath in c:\VS19Projects\CPP\SimpleMath\Debug\SimpleMath.dll”。
我使用了 dumpbin /HEADERS SimpleMath.dll 来尝试查看 dll 入口点。不返回入口点。这似乎表明我对 *.def 的使用不正确。
我们将不胜感激。
//SimpleMath.cpp
int __stdcall SimpleMath(int & x)
{
int result = 0;
for (int a = 0; a <= x; a++) {
result += a;
}
return result;
}
;defMe.def C++ code
LIBRARY "SimpleMath"
EXPORTS
SimpleMath
// VBA Code in Excel Module
Declare Function SimpleMath Lib "C:\VS2019Projects\SimpleMath\Debug\SimpleMath.dll" (ByRef x As Long) As Long
Sub TestMe()
Dim n As Long: n = 5
dim result as long
result = SimpleMath(n)
End Sub
【问题讨论】:
-
您说,“Excel 中的 VBA 代码可以工作。由于该示例的许多 Web 变体看起来很旧,我想知道 VS2019/C++ 是否需要旧示例中未涵盖的内容?”。您能否准确报告您看到的错误?
-
我得到运行时错误 '453': Can't Fine DLL entry point SimpleMath in c:\VS19Projects\CPP\SimpleMath\Debug\SimpleMath.dll。我仔细查看了 C++ 代码和 VBA,没有发现拼写错误或错误。如何排除故障以找到问题?谢谢。
-
链接器 > 输入 > 模块定义文件设置似乎没有达到预期效果。密切关注设置对话框顶部的两个组合框。他们有不选择当前的诀窍。您需要对所有配置和所有平台进行此更改。
标签: c++ excel visual-studio dll