我会想到相当简单的答案,但我似乎找不到直接答案。我可以在这个主题周围看到很多,但没有解决这个问题(见下面我能找到最接近的答案)
我使用vb.net创建了一个.dll并导入它以便在Excel中使用没问题。当我dim
和set
这个类的实例时,intellisense会获取库和类名,但是从那里不显示函数/变量或子例程名称。例程和变量编译和运行完全正常,但我希望这个库可以用于其他人,因此intellisense非常有帮助。
VB.net中的示例代码:
Namespace wtf
Public Class samplerJam
Public jjj As String
Public Sub method1()
jjj = "Hello"
End Sub
End Class
End Namespace
我错过了一些非常简单的事情吗?
(找到this answer to similar question但是根据那个设置,我应该可以看到我的潜艇/功能)
答案 0 :(得分:1)
在仔细阅读了一些C#之后(关于这个主题的VB.net并不多)我找到了答案,我需要在我的班级声明前加上<ClassInterface(ClassInterfaceType.AutoDual)>
,所以:
Namespace wtf
<ClassInterface(ClassInterfaceType.AutoDual)> Public Class samplerJam
Public jjj As String
''' etc
答案 1 :(得分:1)
这对于聚会来说可能有点晚了,但是我在尝试解决VB.NET中的类似问题时偶然发现了这个问题,因此希望对您/某人有帮助。
在解决智能感知方面,您的原始答案将起作用。但是,我的方法涉及使用GUID。
比方说,我有一个名为Foo
的类,希望将其公开给Excel / Access。我将创建由Interface
-
Foo
Public Interface IFoo
Function HelloWorld() As String
End Interface
Public Class Foo
Implements IFoo
Public Function HelloWorld() As String Implements IFoo.HelloWorld
Return "Hello World!"
End Function
End Class
如您所见,Foo
有一个名为HelloWorld
的函数,该函数在接口中声明,并实现到该类中。
因此,现在,为了确保在智能感知中获得此信息,我们可以向接口/类添加一些属性以将其公开给Excel。我的界面更改如下-
<ComVisible(True)>
<Guid("2055A907-9D7A-4DC9-A46B-6E283713A5AB")>
<InterfaceType(ComInterfaceType.InterfaceIsIDispatch)>
Public Interface IFoo
Function HelloWorld() As String
End Interface
我的班级将更改为-
<ComVisible(True)>
<Guid("2C4D41A7-235E-4F48-BE99-62118B2852A7")>
<ClassInterface(ClassInterfaceType.None)>
<ProgId("Foo")>
Public Class Foo
Implements IFoo
Public Function HelloWorld() As String Implements IFoo.HelloWorld
Return "Hello World!"
End Function
End Class
要生成GUID,可以在Visual Studio中使用一些简单的步骤。工具>创建GUID> VB.NET
的选项6或C#
的5。
您的DLL现在可以与智能感知一起使用了!
此过程是手动的,如果您在蓝月亮中执行一次/只有一台目标计算机超出您自己的目标计算机,就可以了。
您要查找与用于生成DLL的.NET版本相对应的.NET文件夹。假设您至少使用.NET 4.0以上版本-
C:\Windows\Microsoft.NET\Framework\v4.0.30319\
您需要使用Regasm来注册dll。
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319\
.\RegAsm.exe PathToYourDLL\DLLName.dll
请注意,如果您的路径中包含空格,请在文件路径周围使用“引号”
如果您有一些目标计算机,则创建MSI为您执行注册可能会更容易。
您可以从Microsoft Marketplace(https://marketplace.visualstudio.com/items?itemName=VisualStudioClient.MicrosoftVisualStudio2017InstallerProjects)下载扩展程序并构建MSI / EXE以完成注册。
关于如何使用此扩展名创建安装向导的教程很多,默认情况下,VS会在您的dll上设置属性以在安装过程中为您注册这些属性