tlb不生成任何方法

时间:2015-11-25 19:44:37

标签: .net vba com

我已经创建了一个类库DLL并将其包装起来,但是当我在VBA(Excel)中使用它时它没有方法。一切都来自另一个.NET程序:

这是我的代码:

    namespace NeilLibrary
    {
        public interface INeilTest
        {
            string DoMethodReturn(string name);
            string DoMethodOut(string name, out string name2, out bool isPrev);
        }
        [Guid("BA7CC0F2-9C07-4EF9-B799-18D317B7E293")]
        [ComVisible(true)]
        public class NeilTest
        {
            public NeilTest() { }
            [ComVisible(true)]
            public string DoMethodReturn(string name)
            {
                return "name: " + name;
            }

            [ComVisible(true)]
            public string DoMethodOut(string name, out string name2, out bool isPrev)
            {
                name2 = "New Value";
                isPrev = true;
                return "Name: " + name;
            }
        }        }

我在程序集中启用了COM的情况下构建它,然后运行以下命令:

regasm.exe NeilLibrary.dll /tlb:neil.tlb

哪个工作正常。在Excel中,我导入了tlb,它出现在对象浏览器中,所以创建好了,但是没有方法。然而,使用它的方法显示了界面,但这并没有多大用处。

请有人帮忙。

我添加了no-arg构造函数,因为我在某处遇到类似问题的人必须这样做。

2 个答案:

答案 0 :(得分:1)

哦,我发现差异就是你发布了你的代码......

您需要创建要使用COM Visible的函数。您可以在属性文件中或您上面的类别

中执行此操作
[ComVisible(true)]
[Guid("blah")]
public class ConnectionUtilities: IConnectionUtilities
{
}

通过进入C#项目的属性 - > AssemblyInfo.cs并声明如下所示,尝试使整个程序集变得可见:

// Setting ComVisible to false makes the types in this assembly not visible 
// to COM components.  If you need to access a type in this assembly from 
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(true)]

// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("0a2d43c9-da5e-4a59-8006-ff131b33d86c")]

答案 1 :(得分:1)

首先,感谢大家的帮助。

最终解决方案相当简单。我只需要在regasm.exe中添加'/ codebase'(或签名并通过gacutil添加它)。

另外,我没有检查任何其他排列,但这是它对我有用的唯一方式:

text/plain