我们可以在没有指针对象的情况下访问托管代码吗?
我在托管 c++ 中创建了一些应用程序。当我尝试实例化时,它显示错误,因为
无法从 obj 转换为 *obj。 当我实例化为指针 obj 时,它没有显示错误。
所以。 有没有办法在不创建指针对象的情况下访问此类
i have created some application in managed c++.when i try to instantiates it shows error as
cannot convert from obj to *obj. when i instantiates as pointer obj it shows no error.
so. is there any way to access such class without creating pointer object
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
问题表明您正在使用托管 C++,标签表明您正在使用 C++/CLI(在 VS 2005 或更高版本中可用)。 使用 C++/CLI 时您可能不会那么困惑。
如果这就是您所使用的,那么有两种方法可以从 C# 进行“翻译”。 假设您有一些 C#:
您可以在 C++/CLI 中这样编写:
变量
c
称为“句柄”,而不是指针,用 ^ 而不是 * 声明。 另外,我们必须使用gcnew
而不是new
。 这与 C# 中的引用变量是一样的,并且与 C++ 中的指针类似(但不相同),因此我们使用->
来访问成员。或者你可以这样写:
首先要注意的是:我们以局部 C++ 变量的风格声明它。 无需显式地
gcnew
对象。 其次,我们将对象视为局部变量(或对此类变量的 C++ 引用)。 所以我们使用 . 而不是->
。 第三,我们可以通过在其前面加上%
前缀,将这个本地对象“转换”为句柄,其作用类似于我们与普通指针一起使用的&
的 .NET 等效项。 它的意思是“获取对象的地址”或“给我一个对象的句柄”。 最后,我们不必在对象上调用Dispose
。 编译器在声明它的作用域末尾为我们执行此操作,因为Dispose
方法是在 C++/CLI 中实现析构函数的机制。The question says you're using Managed C++, and the tags say you're using C++/CLI (available in VS 2005 or later). You'll probably have a less confusing time with C++/CLI.
If that's what you're using, then there are two ways to "translate" from C#. Suppose you have some C#:
You can write this in C++/CLI like this:
The variable
c
is called a "handle", not a pointer, declared with ^ instead of *. Also we have to usegcnew
instead ofnew
. This is the same thing as a reference variable in C#, and is analogous (but not identical) to a pointer in C++, so we use->
to access members.Or you can write it like this:
First thing to note: we declare it in the style of a local C++ variable. There is no need to explicitly
gcnew
the object. Secondly, we treat the object as if it was a local variable (or a C++ reference to such a variable). So we use . instead of->
. Thirdly, we can "convert" this local object into a handle, by prefixing it with%
, which acts like the .NET equivalent of&
that we use with ordinary pointers. It means "take the address of" or "give me a handle to" an object. Finally, we don't have to callDispose
on the object. The compiler does that for us at the end of the scope in which we declared it, as theDispose
method is the mechanism by which destructors are implemented in C++/CLI.您可以在堆栈上创建它。
也许您正在寻找的语法是这样的:
You could create it on the stack.
Maybe the syntax you are looking for is this: