尝试将 c++ dll 导入 c-sharp 代码
Posted
技术标签:
【中文标题】尝试将 c++ dll 导入 c-sharp 代码【英文标题】:Trying to import a c++ dll to a c-sharp code 【发布时间】:2017-05-21 17:27:40 【问题描述】:我试图做一个最简单的例子,以便我开始理解这是如何完成的。在网上搜索我只找到了我不太了解的示例。
这是 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# 控制台应用程序代码:
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)。 p>
我错过了什么?
我尝试在 C++ 代码中的 CallMe 声明之前添加“__declspec(dllexport)”,但没有成功。
【问题讨论】:
ClassLibrary1.dll 未复制到 C# 项目输出目录,或者您的平台不匹配,这意味着 C# 以 64 位运行,而您的 DLL 为 32 位(或其他方式) .这是加载问题而不是导出符号问题,我强烈认为这是平台不匹配问题。 您的 DLL 在哪里?该位置是否在PATH
变量中?
您的安装中可能缺少 VCRedist 软件包。如果你在同一台机器上构建所有东西,那就奇怪了。
为什么添加它作为参考?这肯定是一个非托管库。还是不是?
@πάνταῥεῖ - 你是对的,我不小心将 dll 放在了错误的文件夹中。但我仍然收到另一个错误,请检查编辑
【参考方案1】:
(代表 OP 发布)。
解决方案分别是:
我仍然收到“无法加载 DLL “ClassLibrary1.dll”:找不到指定的模块(HRESULT 异常:0x8007007E)”。
错误 #1:dll 放置错误,抱歉。
现在我收到一个新错误:“尝试加载格式不正确的程序。(来自 HRESULT 的异常:0x8007000B)”
错误 #2:c++ 代码编译为 x86,而不是 x64,非常抱歉。
我现在收到错误:“无法在 dll 中找到名为“CallMe”的输入点”
错误 #3:在声明/定义函数时必须输入“__declspec(dllexport)”。
【讨论】:
以上是关于尝试将 c++ dll 导入 c-sharp 代码的主要内容,如果未能解决你的问题,请参考以下文章