我为非托管 C++ 库(与 C# 一起使用)制作了非常简单的包装器。Wrapper 有一个非托管类和一个托管类。托管类具有非托管类的私有成员并像那样使用它。
我已经完成了非常简单的设置——我只为一个函数创建了包装器,以查看是否一切正常。但是,一旦我创建了一个包装器实例,我的应用程序就会出现异常“检测到 LoaderLock”,并显示以下消息:
DLL 'c:\path\CPPWrapper.dll' 正在尝试在 OS Loader 锁内进行托管执行。不要尝试在 DllMain 或图像初始化函数中运行托管代码,因为这样做会导致应用程序挂起。
如果我为“LoaderLock”异常关闭中断,我会得到“FileLoadException was unhandled”:
Could not load file or assembly 'CPPWrapper.dll' or one of its dependencies. Exception from HRESULT: 0xE0434352
知道我做错了什么,我该如何解决这个问题?
CPPWrapper.h
// CPPWrapper.h
#pragma once
#include "Native.h"
using namespace System;
namespace CPPWrapper {
public ref class Class1
{
public:
Class1() : mnt(new Native)
{
}
~Class1(void)
{
// call the finalize method
this->!Class1();
}
// Finalize (for garbage collection)
!Class1(void)
{
// Remove unmanaged class
delete mnt;
mnt = NULL;
}
void Napravi()
{
mnt->CreatePK();
}
private:
Native *mnt;
};
}