问题描述
我正在使用 C# 中的 .NET Framework 4.8 和 Visual Studio 2019 构建类库。
我想从 Access 2016 VBA 调用我的 .NET 类库中的函数。
Run-time error '-2147024894 (800700002)':
Automation error
The system cannot find the file specified.
- 自定义类库的参考已添加到 VBA 中的
Tools | References
下。 - C# 程序集是在每个引用的程序集上使用
copy Local
选项构建的。 - 我从管理员:命令提示符尝试了
SFC /SCANNow
。这报告了一些 DLL 已被替换。SFC /SCANNow
的后续运行报告未发现任何问题。 - 引用的程序集都是 Microsoft .NET Framework 4.8 程序集。不涉及第三方 DLL。
- 构建期间没有出现错误或警告。
- 程序集标记为
COM Visible
。 - 程序集已成功注册到
regasm
。
A 尝试了一些其他方法。还没有成功。
- 我从头开始 - 并创建了一个 .NET Framework 4.72 DLL。
- 程序集信息已选中“使程序集 COM 可见”。
- 构建信息已选中“注册 COM Interop”。
- 我成功地添加了对工具的引用 | VBA 编辑器中的参考。
现在我收到以下错误:
Run-time error 429 activex component can't create object.
该类的代码如下:
using System;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Security.Cryptography;
using System.Runtime.InteropServices;
namespace NWBLibrary
{
[ClassInterface(ClassInterfaceType.AutoDual)]
public class ReedDecibelLogger
{
/// <summary>
/// GetSha256filehash computes a SHA256 hash of a file.
/// </summary>
public string GetSha256filehash(string fileSpec)
{
string filehash = string.Empty;
byte[] hashValue;
SHA256 managedSha256 = SHA256.Create();
FileStream fileStream;
using (fileStream = new FileStream(fileSpec,FileMode.Open))
{
hashValue = managedSha256.ComputeHash(fileStream);
fileStream.Close();
}
filehash = Convert.ToBase64String(hashValue);
return filehash;
}
}
}
上述程序集的引用已添加到 VBA 编辑器的 Tools | References
部分。
VBA 代码是:
' Returns the SHA256 near unique hash for the specified file.
Public Function filehash(ByVal fileSpec As String) As String
Dim loggerObj As New NWBLibrary.ReedDecibelLogger
filehash = loggerObj.GetSha256filehash(fileSpec)
End Function
我的问题是:
- .NET 程序集(自定义和引用)应位于何处,以便 VBA 可以找到所有必需的 DLL?
- 我是否需要修改开发框上的搜索路径,以便 Access VBA 可以找到 DLL?
- 这是否是 Microsoft 程序集所依赖的程序集,但在使用
copy Local
时不包括在内? - 我是否应该使用 Fusion 日志查看器 (fuslogvw.exe) 来查看是否缺少依赖程序集?
- 有人可以推荐一本讨论构建用于 VBA 的库的参考书或第三方书籍吗?
- 如果这是 CLR 没有看到所有依赖项的问题,您将如何使 GAC 和所有依赖项对 CLR 可见?
- 是否需要其他步骤才能让 VBA 看到程序集和 GAC?列表项?
- 我是否需要为 C# 程序集创建 DLL 入口点?
- 我需要尝试不同版本的 Microsoft Access 吗?
- 我可以让它在一个工作站上运行,但它在另一台工作站上失败并显示 429 错误。这可能是一个依赖性问题。
我正在使用 Fusion Logger 查看引发 429 错误的机器上是否缺少依赖项。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)