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

C# 在WPF应用程序中加载非托管DLL,c#,c++,wpf,dll,unmanaged,C#,C++,Wpf,Dll,Unmanaged,我知道我的问题似乎是重复的。但请相信我,我已经尝试了这个网站上提出的几个答案,到目前为止还没有成功。因此,如果有人能告诉我我现在所做的有什么问题,我将非常感激。一个清晰的、循序渐进的指南会让我非常感激,希望其他在处理DLL和WPF方面是初学者的人(我已经尝试过了) 这里是一个C++代码,其最简单的形式是: #include <stdio.h> #pragma unmanaged extern "C" { __declspec(dllexport) i

我知道我的问题似乎是重复的。但请相信我,我已经尝试了这个网站上提出的几个答案,到目前为止还没有成功。因此,如果有人能告诉我我现在所做的有什么问题,我将非常感激。一个清晰的、循序渐进的指南会让我非常感激,希望其他在处理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;
    }
}
代码编译和生成成功。我已将DLL文件放入文件夹
test1\bin\Debug
。但每当我尝试使用
add
功能时,就会出现一个异常窗口,告诉我:

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

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


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

)很可能问题是C++和C应用程序的构建设置的差异。


尝试检查,然后回答。希望这会有所帮助。

您的Windows平台是32位还是64位。您是否为32位或64位构建了非托管DLL?它是32位@RichardCritenthanks。显然,当我将DLL文件的完整路径,即
DllImport(@“C:\path to file\OurDll.DLL”…
放入DLL文件时,问题神奇地解决了!
/// 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