私の質問は重複しているように見えます。しかし、私を信じて、私はこのサイトで提案されたいくつかの答えを試し、運がなかった。誰かが私がやっていることが間違っていることを教えてくれたら、とても感謝しています。明確でステップバイステップのガイドは、私と、うまくいけば、DLLとWPF(私はすでにthisとthisとthisを試してみました)を扱う初心者であることを歓迎します。ここでWPFアプリケーションでアンマネージDLLをロードする
最も単純な形式でのC++コードです:
#include <stdio.h>
#pragma unmanaged
extern "C"
{
__declspec(dllexport) int add(int a,int b)
{
return a+b;
}
__declspec(dllexport) int subtract(int a,int b)
{
return a-b;
}
}
OK、私は、Visual C++ 2013でDLLプロジェクトでこれを入れて、それを構築します。どのファイルが成功し、OurDLL.dll
という名前のファイルが作成されます。
は今、私は新しいC#WPFアプリケーションを作成し、できるだけ簡単な方法を記述したファイルMainWindow.xaml.cs
に次の行を追加します。コードはコンパイルされ、正常にビルド
/// some using statements
using System.Runtime.InteropServices;
namespace test1
{
public partial class MainWindow : Window
{
[DllImport("OurDll.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int add(int a, int b);
/// the rest of the code
。 DLLファイルをtest1\bin\Debug
というフォルダに入れました。私はadd
機能を使用しようとするたびしかし、例外ウィンドウは、これを言って表示されます。
型「System.BadImageFormatException」の未処理の例外はtest1.exe
で発生しました追加情報:試行がしました不正な形式のプログラムを読み込みます。 (HRESULTからの例外:0x8007000B)
今私は本当にイライラしていますし、何をすべきか見当がつかない:(
があなたのWindowsプラットフォーム32ビットまたは64ビットです。あなたは32または64ビットのために管理されていないDLLを構築しましたか? –
それは32ビットだ@RichardCritten –