在 c++/cli 中建立托管对象和本机指针之间的映射?

发布于 2024-11-28 03:41:02 字数 190 浏览 1 评论 0 原文

我有一个 c++/cli 类,我想在其中维护托管字符串和本机指针之间的映射。

使用 std::map 会向编译器发出警告 C4368(无法将“成员”定义为托管“类型”的成员:不支持混合类型)。

使用字典给出 C3225:“TValue”的泛型类型参数不能是“本机指针”,它必须是值类型或引用类型的句柄

如何实现此映射?

I have a c++/cli class in which I would like to maintain a mapping between a managed string and a native pointer.

Using std::map gives the compiler Warning C4368 (cannot define 'member' as a member of managed 'type': mixed types are not supported).

Using Dictionary gives C3225: generic type argument for 'TValue' cannot be 'native pointer', it must be a value type or a handle to a reference type

How can I achieve this mapping?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

π浅易 2024-12-05 03:41:02

只需创建一个保存本机指针的值类型,即

value struct TValue { native* ptr; };

Dictionary<String^, TValue> d;

Just make a value type which holds the native pointer, i.e.

value struct TValue { native* ptr; };

Dictionary<String^, TValue> d;
雪花飘飘的天空 2024-12-05 03:41:02

Dictionary 是您最好的选择。不幸的是,IntPtr 在概念上等同于 void*,因此您会丢失类型信息,并且每次要使用该值时都必须将其转换为真正的指针类型。

Dictionary<String^, IntPtr> is your best bet. Unfortunately, IntPtr is conceptually equivalent to void*, so you lose type information and will have to cast the value to the real pointer type every time you want to use it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文