试图将c ++ dll导入到c-sharp代码中

时间:2017-05-21 17:27:40

标签: c# c++ dll pinvoke marshalling

我正在尝试制作最简单的示例,以便我开始了解这是如何完成的。在网上搜索我只找到了我不太了解的例子。

这是C ++类库项目中的c ++代码。

#include "stdafx.h"
#include <iostream>
#include "ClassLibrary1.h"
using namespace std;

extern "C" { 
    void CallMe()
    {
        cout << "I am the called function! Hooray!" << endl;
    }
}

这是C#Console应用程序代码:

using System;
using System.Runtime.InteropServices;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("calling dll");
            CallMe();
            Console.ReadLine();
        }

        [DllImport("ClassLibrary1.dll")]
        public static extern void CallMe();
    }
}

我添加了dll作为C#项目的引用,并将其放在与可执行文件相同的文件夹中。

我仍然收到“ 无法加载DLL”ClassLibrary1.dll“:找不到指定的模块(HRESULT异常:0x8007007E) ”。

我错过了什么?

我尝试在C ++代码中声明CallMe之前添加“__declspec(dllexport)”,但没有运气。

1 个答案:

答案 0 :(得分:1)

(代表OP发布)

解决方案分别为:

  

我仍然得到一个&#34;无法加载DLL&#34; ClassLibrary1.dll&#34;:找不到指定的模块(HRESULT异常:0x8007007E)&#34;。

错误#1:错误放置dll,抱歉。

  

现在我收到一个新错误:&#34;尝试加载格式不正确的程序。 (HRESULT异常:0x8007000B)&#34;

错误#2:c ++代码编译为x86,而不是x64,双重抱歉。

  

我现在得到了错误:&#34;无法找到名为&#34的Entery点; CallMe&#34;在dll&#34;

错误#3:你必须把&#34; __ declspec(dllexport)&#34;在声明/定义函数时。