3

.NET 4.0 を使用して Win7 で VS2012 を実行しています。私は次のことを試しました:

  • C++ DLL プロジェクトの作成
  • シンボルのエクスポートボックスをチェック/チェック解除
  • プラットフォーム ターゲットが同じであることを確認しました。私の場合、win32
  • 必要な extern "C" と __declspec(dllexport) を必要に応じて追加しました。
  • DLL を正常にコンパイルし、C# プロジェクトで参照しようとしました。

残念ながら、追加できないというエラーが表示され、有効なアセンブリまたは COM オブジェクトであることを確認する必要があります。

コードをエクスポートするのをあきらめたので、「42」の例だけで満足です!

dumpbin で調べてみましたが、正しくシンボルをエクスポートしています:

1    0 00011023 ??0CEvolutionSimulator@@QAE@XZ
2    1 00011127 ??4CEvolutionSimulator@@QAEAAV0@ABV0@@Z
3    2 00011005 ?GetNumber@CEvolutionSimulator@@QAEHXZ
4    3 0001104B ?fnEvolutionSimulator@@YAHXZ
5    4 00017128 ?nEvolutionSimulator@@3HA

私の脳はアイデアから新鮮です。誰かが私を啓発してもらえますか?何を試してもこのエラーが発生するようです。

4

1 に答える 1

1

extern "C"を使用して、.NET コードからC++ DLL (を使用してエクスポート) に常駐する関数を pinvoke する必要がありますDllImportAttribute。C++ DLL を .NET アセンブリのように参照することはできず、DLL からクラスを使用することはできず、DllImportC に似た関数のみを使用できます。

msdn の例:

using System;
using System.Runtime.InteropServices;

class Example
{
    // Use DllImport to import the Win32 MessageBox function.
    [DllImport("user32.dll", CharSet = CharSet.Unicode)]
    public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);

    static void Main()
    {
        // Call the MessageBox function using platform invoke.
        MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0);
    }
}
于 2013-09-25T06:47:51.327 に答える