如何使用 C# 中使用 ref sbyte 的方法处理 COM 引用

Posted

技术标签:

【中文标题】如何使用 C# 中使用 ref sbyte 的方法处理 COM 引用【英文标题】:How to treat COM references with methods that use ref sbyte in C# 【发布时间】:2017-08-23 09:11:48 【问题描述】:

我的本​​地 ATL COM 项目中的方法有以下 IDL 定义:

[id(1)] HRESULT Create([in] CHAR* a, [out] Details* b);

我从我的 C# 项目中添加了对我的 COM 对象的引用,它为我生成了这个函数的存根,我需要调用它:

void Create(ref sbyte a, out SampleNativeLib.Details b)

我希望库允许我在此函数上使用字符串作为 ref sbyte a 参数。

如何调用它生成的Create 方法?是否有任何替代方法让它接受 ref sbyte a 参数作为字符串?

【问题讨论】:

this 可能会让您入门(其他方向相同) @dlatikay 我正在尝试从托管到本地,而不是相反... 我想说的是,反过来它的工作方式也一样:重写 ATL 函数,使其接受 BSTR,该函数将映射到 c# 中的string。 another related one 【参考方案1】:

您需要添加string 属性。这确保CHAR 指针被视为字符串:

[id(1)] HRESULT Create([in, string] CHAR* a, [out] Details* b);

【讨论】:

以上是关于如何使用 C# 中使用 ref sbyte 的方法处理 COM 引用的主要内容,如果未能解决你的问题,请参考以下文章

将 sbyte[] 固定为字符串 C#

字节到 sbytes 并返回 - C# NAudio

C#中方法中 ref 和 out的使用

C#中关键字ref和out的区别

C# ref与out关键字区别

无法在此 ref ClassName (byRef) 方法上使用类功能 C# 7.2