尝试从C#调用dll时出现BadImageFormatException

时间:2016-09-05 10:02:49

标签: c# c++ .net opencv dll

我正在使用opencv库编写一个简单的dll。 dll的代码如下:

Dll头文件 -

#pragma once
#include "stdafx.h"
#ifndef _DLL_TUTORIAL_H_
#define _DLL_TUTORIAL_H_
#include <iostream>
#include "opencv2\opencv.hpp"

#if defined DLL_EXPORT
#define DECLDIR __declspec(dllexport)
#else
#define DECLDIR __declspec(dllimport)
#endif

extern "C"
{
    DECLDIR int Add(int a, int b);
    DECLDIR void Function(void);
}

#endif

Dll源文件 -

#define DLL_EXPORT

#include <iostream>
#include "ConsoleApplication3.h"
#include "opencv2\opencv.hpp"


extern "C"
{
    DECLDIR int Add(int a, int b)
    {
        //cv::Mat c(100, 100, CV_8UC1);
        return(a + b);
    }

    DECLDIR void Function(void)
    {
        std::cout << "DLL Called!" << std::endl;
    }
}

C#脚本调用dll中的方法 -

using System;
using System.Runtime.InteropServices;

class Sample
{
    [DllImport ("ConsoleApplication3.dll")]

    public static extern void Function();

    public static void Main()
    {
        System.Console.WriteLine("hello world");
        Function();
    }
}

问题是: -

错误:

Unhandled Exception: System.BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
at Sample.Function()
at Sample.Main() in c:\Users\supertramp\Documents\Projects\opencv_dll\opencv_dll\filedll.cs:line 13

1)当我在VS 2015中生成64位dll时,会抛出错误。

2)当我生成一个32位的dll时,当我取消注释我在cv::Mat方法中定义Add变量的行时,会抛出错误。

我无法理解问题出在哪里。我阅读了与此提及相关的其他帖子,该错误与32位或64位dll构建有关,但在我的情况下,注释cv::Mat定义的行使得dll运行正常。

可能是什么问题?

0 个答案:

没有答案