所以这里是新手,所以请随时让我知道任何违反礼仪的行为!
我是库编译的新手,一直在研究(主要在这个论坛上)构建可以从办公室和其他支持 vba 脚本的程序引用的库。我找到了一些很好的答案。我已经成功地从这个线程执行了解决方案:
一个简单的 C# DLL - 如何从 Excel、Access、VBA、VB6 调用它?
这涉及在 VBA 中创建 C# 类的实例,然后调用该类的方法(dll 必须是“regasm”)。我对此线程中概述的解决方案非常感兴趣:
其中最受好评的答案(来自 Panda-34)似乎显示了一种使用纯声明函数而不是创建对象的方法。如果我正确理解了 Panda 的回答,这种方法能够将 dll 加载到 vba 项目中,而无需在 tools->references 中设置引用(它使用 ChDir 的巧妙技巧)。
我能够让 DeclareFunction 传递 vba 编译,但是当执行到达使用该函数的行时,我收到“无法确定入口点”类型的消息。此错误的所有论坛解决方案都涉及使用 regasm 在 dll 中注册类,然后设置引用以便可以创建类的实例。我的问题是:
1) 在 Panda 的解决方案中,dll 是否还需要 regasm?
2) 使用 C# 来实现这个解决方案是不可能的,因为 C# 函数总是包装在类中吗?我开始怀疑问题是否在于您不能在 dll 的全局级别不可见的方法上声明函数,因为它可能是模棱两可的 - Test.dll 中的 Class1 和 Class2 可能都有一个 HelloWorld() 成员. 如果是这样的话,无论如何我更喜欢 C++(我的机器有 csc 而不是 cl,所以我一直在学习一些 C#)。
如果我不应该为这个问题开始一个新线程,我很抱歉。我是 SO 的新手,所以我无权评论 Panda 的答案,而且它明确表示不要用你的答案问另一个关于某人的答案的问题,所以我认为这意味着开始一个新线程......