如何将 pin_ptr 放入通用列表中?

发布于 2024-08-21 07:23:42 字数 329 浏览 5 评论 0原文

我有一个托管 C++ 方法,它采用 String 列表作为参数^

该方法需要使用指向 String 中内存的指针填充非托管结构^

使用 PtrToStringChars 提取 WCHAR* 非常简单,

但是我不知道数量在设计时分配的 pin_ptr

我想将固定的 ptr 添加到列表中,其内容类似于下面的内容 列表< pin_ptr < const wchar_t>>

这样做会产生 错误 C3225:“T”的泛型类型参数不能是“cli::pin_ptr”,它必须是值类型或引用句柄

有没有办法做到这一点?在托管 C++ 中

I've got a managed C++ method that takes as a parameter a list of String^

the method needs to populate an unmanaged structure with pointers to the memory in the String^

extracting the WCHAR* is simple enough with PtrToStringChars

however I dont know the number of pin_ptr's to allocate at design time

I'd like to add the pinned ptr to a list, with something similar to the below
List< pin_ptr< const wchar_t>>

doing this yields
error C3225: generic type argument for 'T' cannot be 'cli::pin_ptr', it must be a value type or a handle to a reference

is there a way to do this? in managed C++

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

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

发布评论

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

评论(1

柠栀 2024-08-28 07:23:42

好吧,你有一些问题。首先 pin_ptr 不是托管类型,因此您无法将其放入列表中。您可以使用 C++ 向量代替,但以下情况除外:

固定指针只能声明为堆栈上的非静态局部变量。

来自 http://msdn.microsoft.com/en -us/library/1dz8byfh%28VS.80%29.aspx

相反,您可能必须使用 GCHandles 直接使用 GCHandleType 固定。

Well you have a few problems. First pin_ptr isn't a managed type, so you wouldn't be able to put it in a List. You could use a C++ vector instead except:

Pinning pointers can only be declared as non-static local variables on the stack.

from http://msdn.microsoft.com/en-us/library/1dz8byfh%28VS.80%29.aspx.

Instead you'll likely have to use GCHandles with a GCHandleType of Pinned directly.

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