gpt4 book ai didi

C# 派生接口(interface)在 C++ 中无法正常工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:14 25 4
gpt4 key购买 nike

我在 C# 中定义了两个接口(interface),如下所示:

[Guid("4938540B-3DB2-452c-A061-59EC499657E7")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IRADevice
{
Void FA();
}

/// <summary>
/// IRADevice interface represents a given RADevice.
/// </summary>
[Guid("4938540B-3DB2-452c-A061-59EC499657E8")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IRADevice2 : IRADevice
{
void FB();
}

在 C++ 代码中,我使用以下命令导入由上述接口(interface)生成的 tlb

#import "device.tlb"  raw_interfaces_only

生成的tlh文件如下:

struct __declspec(uuid("4938540b-3db2-452c-a061-59ec499657e7"))
IRADevice : IDispatch
{
//
// Raw methods provided by interface
//

virtual HRESULT __stdcall FA ( ) = 0;
};

struct __declspec(uuid("4938540b-3db2-452c-a061-59ec499657e8"))
IRADevice2 : IDispatch
{
//
// Raw methods provided by interface
//

virtual HRESULT __stdcall FB ( ) = 0;
};

我希望 IRADevice 派生自 IRADevice 而不是 IDispatch,并且包含 FA 函数。谁能告诉我哪里做错了?

最佳答案

正如@HansPassant 所说,这是一个已知的限制。我花了一分钟,但我找到了一些相关文档来支持这一事实。 http://msdn.microsoft.com/en-us/library/aa645736(v=vs.71).aspx

最相关的部分是:

在 C# 中声明的 COM 接口(interface)必须包括其基接口(interface)的所有成员的声明,但 IUnknown 和 IDispatch 的成员除外 — .NET Framework 会自动添加这些。从 IDispatch 派生的 COM 接口(interface)必须用 InterfaceType 属性标记。

关于C# 派生接口(interface)在 C++ 中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12333246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com