我使用 VS2005 制作了一个简单的 C# DLL(这是一个更大项目的一部分)。我需要通过 VBA 代码在 Excel 中使用 DLL,因此我在程序集上使用 COM Interop。我是试图让构建过程自动生成必要的TLB文件这样我就不需要在每次构建后进入命令行并使用 regasm 。
我的问题是,尽管 DLL 可以正常编译和构建,但它不会生成 TLB 文件。相反,标题中的错误会在输出框中打印出来。
我通过转到 VS2005 中的项目属性 -> 构建 -> 输出 -> 检查来获取其他 DLL 来构建 TLB 文件“注册 COM 互操作”。我还有AssemblyInfo.cs 中的 [程序集:ComVisible(true)].
以下是问题 DLL 的源代码及其为返回类型引用的 DLL 的摘要:
using System;
using System.IO;
using System.Runtime.InteropServices;
using SymbolTable;
namespace ProblemLibrary
{
public class Foo
{
public Foo(string filename)
{
...
}
// method to read a text file into a SymbolTable
public SymbolTable BuildDataSet(string[] selected)
{
...
}
}
}
以下是 SymbolTable.dll 的摘要。它包含 ProblemLibrary 使用的返回类型。
using System;
using System.Collections.Generic;
namespace SymbolTable
{
public class SymbolTable
{
readonly Dictionary<SymbolInfoStub, string> _symbols = new Dictionary<SymbolInfoStub, string>();
/*methods that interact with Dictionary snipped*/
}
}
- 你需要有没有任何参数的ctor。
- 你应该有引导属性 and ProgId属性围绕班级。
- 最好将程序集标记为 ComVisible(false) 并显式标记需要导出的类。
- 为您的类使用接口。
-
确保您在程序集级别具有 GuidAttribute。
[Guid("<PUT-GUID-HERE-1>")]
[ComVisible(true)]
interface IFoo
{
void DoFoo();
}
[Guid("<PUT-GUID-HERE-2>")]
[ComVisible(true)]
[ProgId("ProgId.Foo")]
class Foo : IFoo
{
public void DoFoo()
{
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)