我正在尝试制作最简单的示例,以便我开始了解这是如何完成的。在网上搜索我只找到了我不太了解的例子。
这是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)”,但没有运气。
答案 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;在声明/定义函数时。