Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 我们可以在没有指针对象的情况下访问托管代码吗? 我在托管C++中创建了一些应用程序。当我尝试实例化时,它显示错误为_.net_C++ Cli - Fatal编程技术网

.net 我们可以在没有指针对象的情况下访问托管代码吗? 我在托管C++中创建了一些应用程序。当我尝试实例化时,它显示错误为

.net 我们可以在没有指针对象的情况下访问托管代码吗? 我在托管C++中创建了一些应用程序。当我尝试实例化时,它显示错误为,.net,c++-cli,.net,C++ Cli,无法从obj转换为*obj。当我实例化为pointer obj时,它没有显示错误 所以。有没有办法在不创建指针对象的情况下访问此类对象您可以在堆栈上创建它 MyObject foo; foo.bar(); // accessing bar method on object foo 可能您要查找的语法是: MyObject *foo = new MyObject; foo->bar; 问题是你使用的是管理C++,标签上说你使用C++ + CLI(VS 2005或更高版本)。使用C+

无法从obj转换为*obj。当我实例化为pointer obj时,它没有显示错误


所以。有没有办法在不创建指针对象的情况下访问此类对象

您可以在堆栈上创建它

MyObject foo;
foo.bar();   // accessing bar method on object foo 
可能您要查找的语法是:

MyObject *foo = new MyObject;
foo->bar;

问题是你使用的是管理C++,标签上说你使用C++ + CLI(VS 2005或更高版本)。使用C++/CLI时,您可能会少一些困惑

如果你用的就是这个,那么有两种方法可以“翻译”C。假设你有一些C#:

您可以在C++/CLI中这样编写:

MyClass ^c = gcnew MyClass;

// Call some method
c->MyMethod();

Console.Writeline(c); // will call ToString on MyClass

// Finished with it
c->Dispose();
// Create with local scope
MyClass c;

// Call some method
c.MyMethod();

Console.Writeline(%c); // will call ToString on MyClass (note the %)
变量
c
称为“句柄”,而不是指针,用“^”而不是*”声明。我们还必须使用
gcnew
而不是
new
。这和C语言中的引用变量是一样的,并且与C++中的指针类似(但不完全相同),所以我们使用<代码> -> /COD>访问成员。

或者你可以这样写:

MyClass ^c = gcnew MyClass;

// Call some method
c->MyMethod();

Console.Writeline(c); // will call ToString on MyClass

// Finished with it
c->Dispose();
// Create with local scope
MyClass c;

// Call some method
c.MyMethod();

Console.Writeline(%c); // will call ToString on MyClass (note the %)

首先注意的是:我们用本地C++变量的形式声明它。无需显式地
gcnew
对象。其次,我们把对象当作是局部变量(或者C++引用到这样的变量)。所以我们用。而不是
->
。第三,我们可以将这个本地对象“转换”成一个句柄,方法是在它前面加上
%
,它的作用类似于我们在普通指针中使用的
&
的.NET等价物。它的意思是“获取对象的地址”或“给我一个句柄”。最后,我们不必对对象调用
Dispose
。编译器在我们声明它的作用域的末尾为我们做了这件事,因为
Dispose
方法是在C++/CLI中实现析构函数的机制。

您可以添加一个代码片段来更清楚地显示您的意思吗?请从标记中删除C#.net标记.C#remove。下一个问题:这是托管C++(如问题文本)还是C++ + CLI(如标签中的)?它们是两个完全不同的东西,完全改变了对这个问题的解释。我可以制作这个控制台吗??是,如果c是一个对象(如第三个代码示例)。ToString()返回一个句柄(System.String^),WriteLine接受该句柄。如果c是一个句柄,则需要将c->ToString()放入其中。