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

Loading unmanaged DLLs in WPF applications

本文关键字:DLL 加载 WPF 应用程序 正在      更新时间:2023-10-16

我知道我的问题可能看起来有重复。但相信我,我已经尝试了这个网站上提出的几个答案,但到目前为止运气不佳。因此,如果有人能告诉我我所做的事情出了什么问题,我将不胜感激。一个清晰而循序渐进的指南会受到我的赞赏,希望其他在处理DLL和WPF方面是初学者的人(我已经尝试过这个和这个)。

这里有一个最简单形式的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文件放入文件夹test1binDebug中。但每当我尝试使用add函数时,就会出现一个异常窗口,告诉我:

test1.exe 中发生类型为"System.BadImageFormatException"的未处理异常

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

现在我真的很沮丧,不知道该怎么办:(

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

试着检查这个,这个和这个答案。希望这会有所帮助。