我正在创建一个C#项目,它将由使用COM互操作的VB6应用程序使用.但是我不能让VB6应用程序使用这个DLL.在我的研究中,我发现需要生成一个.tlb文件才能工作,但我不知道如何生成它.

我有一个界面:

[Guid("7A5DA013-C6AA-4327-96C8-096D3F217778"), ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IConnectionAPI
{
    [DispId(1)]
    ADODB.Recordset Get(string URL, string parametros);

    [DispId(2)]
    ADODB.Recordset Post(string URL, string parametros);
}

我让类实现这个接口:

[ProgId("Interop.ConnectionAPI"), Guid("51CA97D0-2630-46C8-A899-33CD12379FBE"), ComVisible(true)]
public class ConnectionAPI : IConnectionAPI
{
    public Recordset Get(string URL, string parametros)
    {
        return null;
    }

    public Recordset Post(string URL, string parameters)
    {
        Recordset returnVB6 = null;
        using (HTTP.HTTP_helper httpPost = new HTTP.HTTP_helper())
        {
            string response = httpPost.HttpPost(URL, parameters);
            
            DataTable dtData = JsonConvert.DeserializeObject<DataTable>(response);
            returnVB6 = VB6_helper.ConvertDataTableToRecordset(dtData);
        }

        return returnVB6;

    }

}

推荐答案

第一个是在您的项目中,转到Properties-Build并选中"注册COM互操作"选项.这样,在构建项目时,它将生成.tlb文件.

enter image description here

Here当您需要在与开发环境不同的环境中生成此文件时,您还可以找到有关该主题的信息.

Csharp相关问答推荐

如何将字节数组转换为字符串并返回?

在Dapper中使用IasyncEum重写GetAsyncEum方法

如何从泛型方法返回一个可为空的T,其中T:notnull?

应该使用哪一个?"_counter += 1 OR互锁增量(ref_counter)"""

解析需要HttpClient和字符串的服务

为什么我的ASP.NET核心MVC应用程序要为HTML元素添加一些标识符?

Thad.Sept()vs Task.Delay().Wait()

用C#从Word文档中删除重复的节控件和文本内容控件

Unix上的.NET(核心):.NET意外地未看到通过P/Invoke系统调用对环境变量进行的进程内修改

如何通过寻找向量长度来优化两个循环?

未在数据流块之间传播完成

在被Interactive Server切换后,Blazor SSR页面无法正确加载JS

.NET8->;并发词典总是比普通词典快...怎么回事?[包含基准结果和代码]

KeyDown从我的文本框中删除输入,如何停止?

如何在使用Google.Drive.apis.V3下载文件/文件夹之前压缩?

在C#/ASP.NET Core 7中,什么可能导致POST请求作为GET请求发送

如何读取TagHelper属性的文本值?

使用postman 测试配置了身份的.NET 6应用程序

在使用xUnit和Mock执行单元测试时,控制器ViewResult返回空的Model集合

为什么C#中的类型别名不能在另一个别名中使用?