Visual Studio 2019 C ++ dll Excel VBA加载项问题

吉姆·冈恩

我在使一个简单的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
吉姆·冈恩

我终于在下面的代码中得到了这个示例Excel VBA可访问的MSVC Dll。我在Visual Studio中执行此操作时遇到了问题(尚未建立MSBuild学习曲线)。因此,按照下面代码中的注释,我使用VS代码通过smdll.cpp和smapp.cpp的命令行编译进行了此操作。我在下面包括了C ++测试代码(smapp.cpp)和VBA代码。可以为C ++测试代码添加调试编译开关[/ LDd(smdll.cpp)和/ Zi(smapp.cpp)]。我使用VS2019“开发人员命令提示符”执行:“ ...> dumpbin / EXPORTS smdll.dll”来确定VBA别名(_SimpleMath @ 4)。

有关如何在VS2019中使用VS2019 MSBuild进行“ get_up_the_curve”的指南,将不胜感激?我能够在VS Code中使用Build和Debug脚本。我无法使* .def文件方法正常工作。对此的指导也将不胜感激。

 //smdll.cpp
 // cl /EHsc /LD smdll.cpp
 #include "smdll.h"
 extern "C" {__declspec(dllexport)  long __stdcall SimpleMath(long  x)
    {   long result = 0;
        for (long a = 0; a <= x; a++) result += a;
        return result;
    }
  }
// smdll.h
extern "C" {__declspec(dllexport)  long __stdcall SimpleMath(long  x);}
// smapp.cpp
// cl /EHsc smapp.cpp smdll.lib
#include <iostream>
#include "smdll.h"
using namespace std;
void main () {
    const long x = 5;
    long result = SimpleMath(x);
    cout << "Ans: " << result << endl;
}
'Excel VBA subroutine
Option Explicit
'used "...>dumpbin /EXPORTS smdll.dll VS 2019 command to get below Alias for smapp
Declare Function smapp Lib "<Path_to>\SimpleMath\smdll.dll" Alias "_SimpleMath@4" (ByVal a As Long) As Long
Sub test()
Dim x, result As Long
x = 5
result = smapp(x)
End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Visual Studio 2019 C ++ CodeLens

在 Visual Studio 2019 C++ 中将窗口应用程序构建为 DLL 库

用于Office的C#Visual Studio工具会出现此错误:Excel遇到X加载项的问题

缺少 Visual Studio 2019 C++ 外部依赖项

C#Visual Studio Excel加载项:如何检测Excel Office主题更改?

Visual Studio 2012 C#-导入DLL

Visual Studio 2019中的Cherry Pick问题

在Visual Studio中替换依赖项DLL

使用 Visual Studio 2019 构建的 EXE 给出“DLL 入口点”错误,但将 EXE 列为 DLL?

Visual Studio 2012无法加载DLL

dll Visual Studio 2010(C#)中的Debugger.Break()和Delphi 6问题

在 Visual Studio C# 2013 中导入 matlab .dll 导致问题

Visual Studio 2013 dll导出链接错误(LNK2019 / LNK1120)

Visual Studio 2019/.NET 5:编译无依赖的单个项目创建应用程序 DLL

在Visual Studio 2019中以“单个文件”发布时,如何摆脱SNI.dll?

使用Visual Studio 2019构建,但越来越依赖MFC140U.dll

如何从Visual Studio.NET或Visual Studio 2005中的本机Visual C ++代码调用托管DLL

Visual Studio 2019 C++ - 编译时报错

Visual Studio 2019 拒绝构建解决方案 C++

在Visual Studio 2019中为C#激活自动完成

在 Visual Studio 2019 中使用 C# 的 ASP.NET

C# 9.0 支持 Visual Studio 2019 中的顶级程序

使用Visual Studio 2019 C#的gRPC构建错误

无法使用 Visual Studio 2019 正确构建 C# 代码

在Visual Studio 2019中C#类库的导出失败

在Visual Studio 2019中组织C#使用?

如何在 Visual Studio 2019 中使用 C#10

Visual Studio C++ 2019,损坏的未详细Intellisense

如何修复 MyMethod () 的 Visual Studio 2019 C# 间距