0

目前,我正在开发一个包含 C++/CLI 项目(它是本机 C++ dll 的包装器)和 C# WPF 项目(使用 C++/CLI 包装器的功能)的解决方案。

我遇到的问题是,每当我创建一个包装类的实例,然后从该类(在 C# 应用程序中)调用一个方法时,都会遇到一个异常(见下文)。

DeskUpdateManaged.dll 中出现“System.AccessViolationException”类型的未处理异常

附加信息:试图读取或写入受保护的内存。这通常表明其他内存已损坏。

产生错误的代码(C#):

MCBiosPackage test = new MCBiosPackage();
test.GetVersionMajor();

GetVersionMajor 方法体 (C++/CLI):

System::String^ MCBiosPackage::GetVersionMajor()
{
    return gcnew System::String(pBiosPackage->GetVersionMajor());
}

MCBiosPackage 类接口(C++/CLI):

public ref class MCBiosPackage
{
public:
    MCBiosPackage(void);
    MCBiosPackage(MCBiosPackage^);
    MCBiosPackage(MCBiosPackage%);
    MCBiosPackage(CBIOSPackage*);
    MCBiosPackage(CBIOSPackage&);
    ~MCBiosPackage(void);

    MCBiosPackage% operator=(MCBiosPackage^);
    MCBiosPackage% operator=(MCBiosPackage%);
    MCBiosPackage% operator=(CBIOSPackage*);
    MCBiosPackage% operator=(CBIOSPackage&);

    System::String^ GetDescription();
    System::String^ GetVersionMajor();
    System::String^ GetDateFormatted();
    System::UInt32^ GetFileSize();

    CBIOSPackage* GetObj(void);
private:
    CBIOSPackage *pBiosPackage;
};
  1. 如何在不引发异常的情况下让程序按预期运行?
  2. 为什么会抛出异常?
  3. 如果对代码有任何改进或有任何建议可以帮助我解决问题;随时发表评论。
4

0 回答 0