编译一个支持VBA中声明函数的dll



这里是新手,请随时告诉我任何违反礼仪的行为!

我是库编译的新手,一直在研究(主要是在这个论坛上)构建可以从办公室和其他支持vba脚本的程序中引用的库。我找到了一些好的答案。我已经成功地从这个线程执行了解决方案:

一个简单的C#DLL-如何从Excel、Access、VBA、VB6调用它?

这涉及到在VBA中创建C#类的实例,然后调用该类的方法(dll必须是"regasm")。我对这个线程上概述的解决方案非常感兴趣:

VBA宏中DLL搜索路径的程序设置

其中得票最多的答案(来自Panda-34)似乎显示了使用纯Declare函数而不是创建对象的方法。如果我正确理解Panda的答案,这种方法可以将dll加载到vba项目中,而无需在tools->references中设置引用(它使用了ChDir的妙招)。

我可以让DeclareFunction传递vba编译,但当执行到使用该函数的行时,我会得到一条"无法确定入口点"类型的消息。所有论坛对此错误的解决方案都涉及使用regasm在dll中注册类,然后设置引用,以便可以创建该类的实例。我的问题是:

1) 在Panda的解决方案中,dll还需要regasm吗?

2) 因为C#函数总是封装在类中,所以使用C#来实现这个解决方案是不可能的吗?我一直在想,问题是否在于不能对在dll全局级别不可见的方法声明Function,因为它可能不明确-Test.dll中的Class1和Class2可能都有HelloWorld()成员。如果是这样的话,我还是更喜欢C++(我的机器有csc而不是cl,所以我一直在学习一些C#)。

如果我不应该为这个问题开始一个新的线程,我很抱歉。我是SO的新手,所以我无权对Panda的答案发表评论,它特别说不要用你的答案再问别人的答案,所以我认为这意味着开始一个新的话题。。。

C#不支持MSIL的所有功能。全局函数就是其中之一。所以AFAIK你不能在C#中有全局函数,它只是不属于语言的一部分。您需要使用托管C++。根据我的经验,最好的方法是使用在regasm和代码库开关中注册的COM友好的c#程序集。

相关内容

  • 没有找到相关文章

最新更新