繁体   English   中英

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

[英]Compile a dll that supports declare function in VBA

所以新手在这里,所以随时让我知道任何礼节违规!

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

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

这涉及在VBA中创建一个C#类的实例,然后调用该类的方法(该DLL必须是'regasm'ed)。 我对此主题中概述的解决方案非常感兴趣:

以编程方式在VBA宏中设置DLL搜索路径

其中顶级upvoted答案(来自Panda-34)似乎显示了使用纯声明函数而不是对象创建的方法。 如果我正确理解Panda的答案,这个方法可以将一个dll加载到vba项目中,而无需在tools-> references中设置引用(它使用ChDir的一个漂亮的技巧)。

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

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

2)使用C#实现这个解决方案是不可能的,因为C#函数总是包含在类中? 我一直在开始怀疑问题是你是否无法在dll的全局级别上看不到的方法上声明函数,因为它可能不明确 - Test.dll中的Class1和Class2都可能都有一个HelloWorld()成员。 如果是这样的话,我更喜欢C ++(我的机器有csc而不是cl,所以我一直在学习一些C#)。

如果我不应该为这个问题开始一个新线程,我很抱歉。 我是SO的新手,所以我没有权限评论Panda的回答,并且它特别说不要用你的答案提出另一个关于某人回答的问题,所以我认为这意味着开始一个新线程......

C#不支持MSIL的所有功能。 全球职能就是其中之一。 所以AFAIK你不能在C#中拥有全局函数,它只是语言的一部分。 你需要Managed C ++ ex。 至于我的经验,最好的方法是使用注册了regasm和codebase开关的COM友好c#程序集。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM