如何在excelvba中使用c#class?
我有一个独立的c#应用程序,它可以做一些特定的事情(监听TCP端口并通过语音合成器发出所有到达它的字符串的声音)。如何使c#类对VBA程序可见,就像其他“引用”对它可见一样?我希望能举一个简短明了的例子。出于某种原因,我很难找到其中一个 如果有一些特定于c#vba交互的陷阱,我也想知道这些 这是一个C代码。我构建的是一个带有“注册COM互操作”设置的类库。 当我将生成的.tlb文件添加到VBA引用列表中时,我希望看到SayCom库中有SayCom类,它有两个方法:square和getCount。我看不出来。我错过了什么如何在excelvba中使用c#class?,c#,vba,excel,C#,Vba,Excel,我有一个独立的c#应用程序,它可以做一些特定的事情(监听TCP端口并通过语音合成器发出所有到达它的字符串的声音)。如何使c#类对VBA程序可见,就像其他“引用”对它可见一样?我希望能举一个简短明了的例子。出于某种原因,我很难找到其中一个 如果有一些特定于c#vba交互的陷阱,我也想知道这些 这是一个C代码。我构建的是一个带有“注册COM互操作”设置的类库。 当我将生成的.tlb文件添加到VBA引用列表中时,我希望看到SayCom库中有SayCom类,它有两个方法:square和getCount。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
[assembly: CLSCompliant(true)]
namespace SayCom
{
[CLSCompliant(true)]
[ComVisible(true)]
public class SayCom
{
int count;
public SayCom()
{
count = 0;
}
[ComVisible(true)]
public int square(int x)
{
++count;
return x * x;
}
[ComVisible(true)]
public int getCount()
{
return count;
}
}
}
据我所知,唯一的“问题”是你的C#代码需要修改。您应该能够按照以下步骤将C#代码作为.dll导入到VB应用程序中。免责声明:我自己没有尝试过 编辑:这涉及到从.dll调用函数。这对我很有用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace ClassLibrary1
{
[Guid("BBF87E31-77E2-46B6-8093-1689A144BFC6")]
[ComVisible(true)]
public interface MyMiniSubs
{
int square(int x);
int getCount();
}
[Guid("BBF87E31-77E2-46B6-8093-1689A144BFC7")]
[ClassInterface(ClassInterfaceType.None)]
public class Class1 : MyMiniSubs
{
int count;
public Class1()
{
count = 0;
}
[ComVisible(true)]
public int square(int x)
{
++count;
return x * x;
}
[ComVisible(true)]
public int getCount()
{
return count;
}
}
}
我以前看过其中一些页面。我甚至不确定它们是否与我的问题有关。他们似乎在谈论不同.NET语言之间的互操作性和共享类。我需要的是能够将C#.NET与非.NET VBA进行接口。对,所以您主要关心通过TCP/IP发送字符串,对吗?我假设您当前的应用程序有一个相对顶级的函数,它接受字符串并传输它。因此,您需要将应用程序构建为.dll,然后将其“导入”到VB应用程序中。然后,您可以查看我在回答中发布的第三个链接,以帮助您理解如何从.dll调用顶级函数并传递适当的字符串。好的,我的问题是如何创建VBA可见的C#类。我更希望它是一个“类型库”,因此方法名和类型名可以通过vba IDE看到,但如果失败或证明太困难,我可以满足于使用简单的DLL并使用vba的“Import”语句调用DLL。到目前为止,我在这两方面都没有任何进展。无论我在C#项目中选择什么设置或编写什么代码,结果都无法从VBA中使用。主要问题是在VBA中使用C#类。我提到在TCP/IP中发送字符串是为了提供一些上下文。我现在明白了,这可能会让人困惑。我投票决定重新打开它,因为现在你想要什么已经很清楚了。快速提问。你明白了吗<代码>项目设置|应用程序|装配信息|使装配COM可见(设置为打开)|生成|注册COM互操作(设置为打开)我没有执行零件装配信息|使装配COM可见。我现在做了,但仍然没有看到班级。我看到了图书馆的SayCom,但里面什么都没有。很抱歉这么晚才回复,但我刚刚醒来:p我已经发布了一个答案。它对我也很有用,谢谢。一个小问题:我不得不以管理员的身份重新启动VisualStudio,因为它在构建过程中无法更新注册表。