C# 如何使用C方法并从C+中的.TLB COM库创建实例+;

C# 如何使用C方法并从C+中的.TLB COM库创建实例+;,c#,c++,com,tlb,C#,C++,Com,Tlb,我从未用C++编写过程序,但现在有一项任务是将我的代码导出到另一种语言。我有一个通过COM互操作导出的C#库。该库是使用RESTFUL API与服务器交互的客户端。它的调用中包含惰性初始化。我将声明我的代码,如下所示: 接口: [InterfaceType(ComInterfaceType.InterfaceIsDual)] public interface IFooBase { [DispId(1)] Task<GetCarResponse> GetCar(GetC

我从未用C++编写过程序,但现在有一项任务是将我的代码导出到另一种语言。我有一个通过COM互操作导出的C#库。该库是使用RESTFUL API与服务器交互的客户端。它的调用中包含惰性初始化。我将声明我的代码,如下所示:

接口:

[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IFooBase
{
    [DispId(1)]
    Task<GetCarResponse> GetCar(GetCarRequest request);
}
汽车响应等级:

public class GetCarResponse
{
    public string Color { get; set; }
}
在C代码中使用此类非常简单,如:

var car = Foo.Initialize("someHost").GetCar(new GetCarRequest { Number = 1 });
<>但是我必须在C++中使用这个代码。问题是-如何初始化Foo实例、GetCarRequest、GetCarResponse并使用库中的方法?我已使用以下方法成功导入库:

#import "FooLibrary.tlb" raw_interfaces_only
并创建了GetCarResponse的实例:

Foo::_GetCarResponsePtr response(__uuidof(Foo::GetCarResponse));
但我不知道如何使用Initialize(string host)方法和库中的其他方法。

您必须在类和接口上添加ComVisible(true)。此外,通用代码不能在COM中使用,因此必须更改接口签名。否则,您可以像这样使用它:但是如果您在这个上下文中对C/C++和COM一无所知,那么这可能是一条漫长的道路,远没有.NET那么容易。
#import "FooLibrary.tlb" raw_interfaces_only
Foo::_GetCarResponsePtr response(__uuidof(Foo::GetCarResponse));