我是C-plus-plus的新手,并尝试使用它为excel创建用户定义的函数。我在Cpp中编写了一个非常简单的测试函数,它只是将两个参数一起添加(Excel单元格引用)。
我编译了一个32位DLL& Visual Studio 2013中使用相同* .cpp和* .def文件的单独64位DLL项目。
当我在32位Excel安装上运行32位DLL时,新的Excel功能正常工作(例如:5 + 10 = 15)。
当我在64位Excel安装上运行64位DLL时,我在单元格中收到#VALUE错误。
任何人都可以看到我在使用64位DLL时出现的明显错误吗?谢谢!
***** VBA (32-bit) *****
Declare Function ExPlus Lib _
"C:\AKH-VSWS\Ex-Plus32\Debug\Ex-Plus32.dll" _
(ByVal a As Double, _
ByVal b As Double) As Double
计算机1:Windows 7(64位),Office 2016(32位),Visual Studio 2013
***** VBA (64-bit) *****
Declare PtrSafe Function ExPlus Lib _
"C:\AKH-VSWS\Ex-Plus64\x64\Debug\Ex-Plus64.dll" _
(ByVal a As Double, _
ByVal b As Double) As Double
计算机2:Windows 7(64位),Office 2016(64位)
Microsoft (R) COFF/PE Dumper Version 12.00.21005.1
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file c:\AKH-VSWS\Ex-Plus64\x64\Debug\Ex-Plus64.dll
PE signature found
File Type: DLL
FILE HEADER VALUES
8664 machine (x64)
7 number of sections
5AC930F1 time date stamp Sat Apr 07 16:58:25 2018
0 file pointer to symbol table
0 number of symbols
F0 size of optional header
2022 characteristics
Executable
Application can handle large (>2GB) addresses
DLL
答案 0 :(得分:0)
这不是一个解决方案,但它可能是朝着正确方向迈出的一步......我今天碰巧偶然发现了一页。推荐的软件似乎认为我的DLL找不到依赖项(MSVCR120D.DLL)。所以我需要更多地研究它。
......仍然愿意接受建议,但是......
http://access.mvps.org/access/bugs/bugs0019.htm
这是由您的依赖项文件(运行时文件)丢失引起的 DLL所需的机器。错误消息“找不到文件” 不是由DLL文件本身生成的,而是自己生成的 无法找到其他所需的DLL。
要确定DLL是否具有任何依赖关系,您可以使用其中一个 两种方法...下载Dependency Walker搜索你的硬盘 任何相关文件,并确保它们存在并注册。
答案 1 :(得分:0)
情节变浓......
似乎我编译了" debug"模式,可能必须从" debug"更改Visual Studio设置。别的什么。
VS2012 MSVCR120D.dll is missing
" ..." D"代表调试信息......调试DLL只有 使用相应版本的Visual Studio,并不意味着 再分配..."
答案 2 :(得分:0)
我想我弄明白了我的问题......
我在调试器模式下编译它,所以它在一个依赖文件的名称上添加了一个“D”。当我将DLL移动到没有Visual Studio的计算机时,它将无法运行。我不得不将编译设置切换到发布模式。
在* .cpp文件中,我错过了__stdcall语句中的两个下划线(_)之一。 Visual Studio的调试器和我没有抓住它。因此,用户定义的函数没有与DLL一起导出。
我也没有在Visual Studio中正确注册/设置* .def文件。因此,即使__stdcall语句正确,该函数仍然无法正确导出。
显然,如果你不以某种方式用excel / windows注册UDF,你需要通过本地VBA函数运行C ++ / DLL函数。我必须阅读(XLL和所有有趣的东西)。
所以,总之,是的......我是愚蠢的。