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

C# 编译一个支持VBA中声明函数的dll,c#,c++,.net,vba,dll,C#,C++,.net,Vba,Dll,所以这里的新手,所以请随时让我知道任何违反礼仪的行为 我是图书馆编译新手,一直在研究(主要是在本论坛上)如何构建图书馆,这些图书馆可以从office和其他支持vba脚本的程序中引用。我找到了一些好答案。我已成功执行此线程中的解决方案: 这涉及到在VBA中创建一个C#类的实例,然后调用该类的一个方法(dll必须是“regasm”的)。我对本主题中概述的解决方案非常感兴趣: 其中,最上面的答案(来自Panda-34)似乎显示了一种使用纯声明函数而不是对象创建的方法。如果我正确理解了Panda的答

所以这里的新手,所以请随时让我知道任何违反礼仪的行为

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

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

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

我能够让declareffunction传递vba编译,但是当使用该函数执行到某一行时,我会收到一条“cannotdeterminateentrypoint”类型的消息。此错误的所有论坛解决方案都涉及使用regasm在dll中注册类,然后设置引用,以便创建类的实例。我的问题是:

1) 在Panda的解决方案中,dll是否仍然需要regasm

2) 使用C#实现这个解决方案是不可能的,因为C#函数总是封装在类中吗?我一直在想,问题是否在于无法在dll全局级别不可见的方法上声明函数,因为它可能不明确-Test.dll中的Class1和Class2可能都有HelloWorld()成员。如果是这样的话,我更喜欢C++(我的机器有CSC而不是CL,所以我一直在学习C)。 我很抱歉,如果我不应该开始一个新的线程为这个问题。我是SO的新手,所以我无权对Panda的答案发表评论,它明确表示不要用你的答案询问其他人的答案,所以我认为这意味着开始一个新的线程…

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

是的,谢谢您的输入,您是对的。我知道它不支持全局功能。我想问的是,这是否意味着不能将函数声明为C#dll。如果将函数声明为MyClass.HelloWorld(),则VBA编译器不喜欢点。我很好奇,因为在我读过的每一个论坛上,人们都说你们不能向自己的dll声明函数,只能向MicrosoftAPI dll声明函数。然而,在上面的第二个链接中,熊猫说他可以做到,他得到了2张选票和一些好的评论,感谢他,所以我认为他的方法是有效的。我想用C++ DLL来试试。