C# 正在尝试导入c++;dll到c-sharp的代码
我试着做一个最简单的例子,只是为了让我开始理解这是如何做到的。在网上搜索时,我只找到了一些我不太懂的例子C# 正在尝试导入c++;dll到c-sharp的代码,c#,c++,dll,pinvoke,marshalling,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 functi
这是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;
}
}
我添加了dll作为对C#项目的引用,并将其放置在与可执行文件相同的文件夹中
我仍然得到一个“无法加载DLL”ClassLibrary1.DLL”:找不到指定的模块(HRESULT的异常:0x8007007E)”
我错过了什么
<>我尝试在C++代码中的CalMe声明之前添加“y-Outlook”(DLLutlook),但没有运气。p> (代表OP发布)
解决方案分别是:
我仍然得到一个“无法加载DLL”ClassLibrary1.DLL:找不到指定的模块(HRESULT的异常:0x8007007E)”
错误#1:dll放置错误,抱歉
现在我遇到一个新错误:“试图加载格式不正确的程序。(HRESULT异常:0x8007000B)”
错误2:C++代码编译为x86,而不是x64,双对不起。 我现在得到错误:“在dll中找不到名为“CallMe”的入口点”
错误#3:在声明/定义函数时必须输入“u declspec(dllexport)”。要么ClassLibrary1.dll没有复制到C#项目输出目录,要么平台不匹配,这意味着C#在dll为32位时以64位运行(或者以其他方式)。这是一个加载问题而不是导出符号问题,我强烈认为这是平台不匹配的问题。你的DLL在哪里?该位置是否在
PATH
变量中?您的安装中可能缺少VCRedist软件包。奇怪的是,如果你在同一台机器上构建所有东西,为什么要添加它作为参考?这肯定是一个无人管理的图书馆。还是不是?@πνταῥεῖ - 你说得对,我不小心把dll放错了文件夹。但我仍然收到另一个错误,请检查编辑
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();
}
}