10

C# exe 内から呼び出したいアンマネージ C++ DLL があります。考えられる解決策を調べたところ、アンマネージ C++ クラスのラッパーとして C++/CLI を使用するのが最善の方法のように思えます。そこで、このような C++/CLI クラスを作成し、DLL にコンパイルします (デストラクタとファイナライザが必要であることはわかっていますが、これまでのところ、コードは Main 関数に入らないため、それらを除外しました。簡単にするために):

#include <cppheader.h>

using namespace System;

namespace DependencyInterface
{
  public ref class DependencyTester
  {
  public:
    DependencyTester()
    {
      _class = new CPPClass();
    }

  private:
    CPPClass* _class;
  };
}

次に、次のような C# 実行可能ファイルがあります。

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;
        }
    }
}

残念ながら、コードを実行しようとすると、次の C++ 例外が発生します。

First-chance exception at 0x000007fefd5a9e5d in DependencyTest2.exe: Microsoft C++ exception: EEFileLoadException * __ptr64 at memory location 0x0094ca58..

Main の最初の行にブレークポイントを設定しようとしましたが、実行がそのポイントに到達する前に例外がスローされます。「続行」をクリックすると (MVS 2010 を使用しています)、次のようになります。

First-chance exception at 0x76d8c5e2 in DependencyTest2.exe: 0xC0000005: Access violation reading location 0x0000000000000020.

誰かアドバイスはありますか?これは Windows 7 x64 上にあり、C++ DLL を含むすべてが x64 用にコンパイルされています。

4

2 に答える 2