在WPF应用程序中加载非托管DLL

时间:2016-04-30 10:39:53

标签: c# c++ wpf dll unmanaged

我知道我的问题似乎有些重复。但请相信我,我已经在这个网站上尝试了几个答案,到目前为止没有运气。所以如果有人能告诉我我在做什么有什么问题,我将非常感激。我将非常感谢一个明确的分步指南,并希望其他初学者能够处理DLL和WPF(我已经尝试过thisthis以及this )。

以下是最简单形式的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;
    }
}

好的,所以我将它放在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函数时,会出现一个异常窗口,告诉您:

  

test1.exe中出现未处理的“System.BadImageFormatException”类型异常

     

其他信息:尝试加载格式不正确的程序。 (HRESULT异常:0x8007000B)

现在我非常沮丧,不知道该怎么做:(

1 个答案:

答案 0 :(得分:2)

问题很可能是您的C ++和C#应用程序的构建设置不一致。

尝试检查thisthisthis个答案。希望这会有所帮助。