アンマネージ C++ ライブラリ (C# で使用する) 用の非常に単純なラッパーを作成しました。Wrapper には、1 つのアンマネージ クラスと 1 つのマネージ クラスがあります。マネージド クラスには、アンマネージド クラスのプライベート メンバーがあり、そのように使用します。
私は非常に簡単なセットアップを行いました - すべてが機能しているかどうかを確認するために、1 つの関数のみのラッパーを作成しました。しかし、ラッパーのインスタンスを作成するとすぐに、アプリケーションは「LoaderLock が検出されました」という例外を受け取り、次のメッセージが表示されます。
DLL 'c:\path\CPPWrapper.dll' は、OS ローダー ロック内でマネージ実行を試みています。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;
};
}