我在使用简单的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':无法在c:\ VS19Projects \ CPP \ SimpleMath \ Debug \ SimpleMath.dll中完善DLL入口点SimpleMath”。
我已使用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
我已经尝试使用C ++ * .def和VBA Declare进行EXPORTS的变体。没有成功。
然后我发现了MSFT Mixed Mode Debugging Tutorial。我能够在VS2019中快速运行此C ++ DLL / C#示例应用程序。我无法使其适应Excel VBA。我对“本地和托管C ++代码”的理解肯定是不够的。
我的项目目标是最终(并希望)成功创建一个高性能C ++ DLL,以加快Excel中大型2d数组计算的速度。我有一个性能较低的C#COM dll,但需要一个C ++ DLL的较高性能。但是我什至无法使这种简单得多的C ++ DLL正常工作。
实现这些目标的指导和建议将不胜感激。