【问题标题】:Calling C# .NET methods from unmanaged C/C++ code从非托管 C/C++ 代码调用 C# .NET 方法
【发布时间】:2019-03-20 08:29:27
【问题描述】:

我需要在原生 c++ 中调用 c# 方法。我遵循this 指南,下载它,它可以工作,但是当我在新版本的.net 上尝试时,我无法重现。 这段代码的主要思想是以这种方式调用 c# 方法: C# .dll -> C++/CLI(托管 c++) -> c++

C#

public static class ManagedClass
    {
        public static bool Check()
        {
            return true;
        }
    }

托管 c++

namespace ClassLibrary1 {

    public ref class DoWork
    {
    public: bool CheckCSharp()
    {
        return CSharp::ManagedClass::Check();
    }
    };
}
__declspec(dllexport) bool Check()
{
    ClassLibrary1::DoWork work;
    return work.CheckCSharp();
}

c++

#include "ClassLibrary1.h"
_declspec(dllexport) bool Check();

int main()
{
    std::cout << Check();
    system("pause");
    return 0;
}

显示错误

错误 LNK2019 无法解析外部符号“bool __cdecl Check(void)” (?Check@@YA_NXZ) 在函数_main中引用

1 个未解决的外部问题

【问题讨论】:

  • 在您的非托管项目设置中,您需要引用 ManagedDll.lib 文件。链接器错误表明您没有处理该问题。
  • @HansPassant 但是当我包含标题时,这意味着它在同一个目录中,那么它应该与它一起,还是不?我在原生 c++ 中创建了一个空的 ClassLibrary1.h
  • .h 文件只能处理声明,它不会告诉链接器要做什么。这是 C# 中不存在的一个细节,它不使用链接器,并且添加对程序集的引用足以让它快乐,但需要在 C++ 中明确处理。

标签: c# c++ .net clr managed-c++


【解决方案1】:

必须写入 .lib 的链接器路径

【讨论】:

    猜你喜欢
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 2013-12-29
    • 1970-01-01
    相关资源
    最近更新 更多