【发布时间】: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++