Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在尝试导入c++;dll到c-sharp的代码_C#_C++_Dll_Pinvoke_Marshalling - Fatal编程技术网

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();
    }
}