【发布时间】:2016-11-30 08:08:22
【问题描述】:
我是 c++/cli 的新手,我面临的情况是: 我正在做的项目需要使用外部 dll,在我的函数中我需要使用来自这个 dll 的类 A、B 和 C,我将它们放在我的 .h 文件中,.h 文件看起来像:
#include library I use
public ref class MyClass
{
public:
MyClass();
~MyClass();
otherfuc();
private:
A *a;
B *b;
C *c;
}
我的 .cpp 文件看起来像:
MyClass::MyClass()
{
a = new A();
b = new B(*a);
c = b->func(); //error happened
}
MyClass::otherfunc()
{
c->func_c()
}
A、B、C 类是非托管类,所以我只有一种方法可以在托管类中声明它们,就像我在头文件中一样。在B类中,有一个叫做func的函数,这个函数返回类类型C,我试过c = &b->func(),这样会抛出AccessViolationException,如果我试过c = b->func,那么错误是函数调用缺少参数。我该怎么办,求救!!!
【问题讨论】:
-
b->func() 正在返回一个临时对象实例。您将其地址存储在 MyClass::c 中。当构造函数退出时,临时对象被销毁并且 MyClass::c 包含无效地址。稍后您调用 otherfunc() 并使用 'c' 中的无效地址导致访问冲突。
-
感谢您的回复。它有助于我理解。对于这个特定的问题,你知道我可以做些什么来实现它吗?我真的很感激。@tukra
标签: c++-cli