私はC#exe内から呼び出したいアンマネージドC++ DLLを持っています。私は可能な解決策を検討しましたが、C++/CLIをアンマネージC++クラスのラッパーとして使用するのが最善の方法です。だから、私はこのように見えるC++/CLIクラスを書いて、DLLにコンパイルされます(私はデストラクタとファイナライザを持っているはずですが、今のところコードはMain関数に入りませんので、簡略化のため):私がしようとすると、コードを実行したとき、私は、次のC++の例外を取得し、残念ながらEEFileLoadException管理DLLにC++ DLLをロードするとき
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DependencyInterface;
namespace DependencyTest2
{
class Program
{
static void Main(string[] args)
{
DependencyTester tester;
}
}
}
:
First-chance exception at 0x000007fefd5a9e5d in DependencyTest2.exe: Microsoft C++ exception: EEFileLoadException * __ptr64 at memory location 0x0094ca58..
#include <cppheader.h>
using namespace System;
namespace DependencyInterface
{
public ref class DependencyTester
{
public:
DependencyTester()
{
_class = new CPPClass();
}
private:
CPPClass* _class;
};
}
私は、このようになりますC#の実行可能ファイルを持っています
私は設定しようとしましたMainの最初の行にブレークポイントがありますが、実行がそのポイントに達する前に例外がスローされます。私が「続ける」(MVS 2010を使用しています)を押すと、私はこれを得ます:
First-chance exception at 0x76d8c5e2 in DependencyTest2.exe: 0xC0000005: Access violation reading location 0x0000000000000020.
誰かアドバイスをありますか?これはWindows 7 x64上にあり、C++ DLLを含むx64用にすべてコンパイルされています。
コールを行うにはスタックトレースを確認する必要があります。しかし、まず、デバッガを管理モードに切り替えて、実際の管理例外を確認してください。 –