gpt4 book ai didi

c# - 来自 C++ COM 的 C# 字符串

转载 作者:太空狗 更新时间:2023-10-29 23:19:19 25 4
gpt4 key购买 nike

我有一个 C++ DLL,一些函数返回 Unicode 空终止字符串:

void SomeFunc(wchar_t* StrBuf)

调用者必须分配 StrBuf - 字符串最多可以有 256 个字符。此 DLL 还公开一个 COM 对象以通过 COM 从 C# 使用此 DLL。 IDL 中的定义:

[id(1), helpstring("bla")]
HRESULT SomeFunc([in,out] BSTR* TextStr, [out,retval] LONG* RetValue);

目前 C# 代码如下所示:

string val = new string('\0', 256); // Allocate memory
MyComObj.SomeFunc(ref val); // Get string
val = val.Substring(0, val.IndexOf('\0')); // Convert from null-terminated string

有没有一种方法可以定义这样一个 COM 函数,以便可以更轻松地从 C# 中使用它?现在它看起来很难看,调用函数需要三行,如果函数有两个字符串参数则需要五行。

最佳答案

如果您将此公开为 COM 对象,只需使用 visual studio 添加对您的对象的引用。它会自动为您生成一个程序集(我相信他们称之为 COM 可调用包装器)。

这会将您的 COM 对象方法公开给 .NET 并且可以正常工作,除非您开始尝试传递某些自定义结构。

这里有一些资源:

COM Callable Wrapper

COM Interop Part 1: C# Client Tutorial

关于c# - 来自 C++ COM 的 C# 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9673791/

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