C++ cli 使用gcroot时System.NullReferenceException异常

C++ cli 使用gcroot时System.NullReferenceException异常,c++-cli,command-line-interface,managed,handles,C++ Cli,Command Line Interface,Managed,Handles,结果证明这个错误与gcroot无关-我错误地连接了一些构造函数,并在连接过程中丢失了实例化的对象 作为记录,下面代码的所有版本在此修复之后都能正常工作,但是添加简单包装器类允许您在包装对象上使用&和*运算符,这是gcroot禁止的。我使用的是下面第三个代码块中概述的版本 我试图通过.dll使用一些测量仪器,但在实现上遇到了问题。将所有代码写入main.cpp并像这样使用对象效果很好: #using "M3D_FP_USB.dll" int main(){ M3D_FP_USB ^obj

结果证明这个错误与gcroot无关-我错误地连接了一些构造函数,并在连接过程中丢失了实例化的对象

作为记录,下面代码的所有版本在此修复之后都能正常工作,但是添加简单包装器类允许您在包装对象上使用&和*运算符,这是gcroot禁止的。我使用的是下面第三个代码块中概述的版本


我试图通过.dll使用一些测量仪器,但在实现上遇到了问题。将所有代码写入main.cpp并像这样使用对象效果很好:

#using "M3D_FP_USB.dll"
int main(){
    M3D_FP_USB ^obj = gcnew M3D_FP_USB;
    obj->Connect();
    ...
}
但是,当我将它放入一个类并用gcroot包装它时,执行时会得到一个“未处理的异常:System.NullReferenceException:对象引用未设置为对象的实例”

class User{       
    ...
public:
    User();
    gcroot<M3D_FP_USB^> obj;
}

User::User(){
    obj = gcnew M3D_FP_USB;
    obj->Connect();
    ...
}

如果将类置于托管状态并直接声明句柄,是否也会发生异常?比如:

ref class User
{
public:
    M3D_FP_USB^ obj;

    ...
};

虽然我不明白为什么它不能像您这样工作…

是的,我在包装器类中尝试过。User类包含太多非托管内容,无法对其进行更改。我用代码更新了帖子。
Wrapper::Wrapper(M3D_FP_USB^ obj){
    iobj = obj;
    iobj->Connect();
    ...
}

int main(){
    M3D_FP_USB ^obj = gcnew M3D_FP_USB;
    Wrapper Ex(obj);
}
ref class User
{
public:
    M3D_FP_USB^ obj;

    ...
};