2016-04-30 10 views
2

私の質問は重複しているように見えます。しかし、私を信じて、私はこのサイトで提案されたいくつかの答えを試し、運がなかった。誰かが私がやっていることが間違っていることを教えてくれたら、とても感謝しています。明確でステップバイステップのガイドは、私と、うまくいけば、DLLとWPF(私はすでにthisthisthisを試してみました)を扱う初心者であることを歓迎します。ここで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)

今私は本当にイライラしていますし、何をすべきか見当がつかない:(

+0

があなたのWindowsプラットフォーム32ビットまたは64ビットです。あなたは32または64ビットのために管理されていないDLLを構築しましたか? –

+0

それは32ビットだ@RichardCritten –

答えて

2

ほとんどの問題は、あなたのCのためのビルド設定++とC#のアプリの不一致である

thisthisthis答えをチェックしてみてください。希望するのに役立ちます。

+1

ありがとうございます。明らかに、私がDLLファイル、すなわち 'DllImport(@" C:\ path-to-file \ OurDll.dll "...'に完全なパスを入れると、問題は魔法のように修正されました! –

関連する問題