我正在尝试完成一个简单的教程,用于在c#console应用程序中使用c ++库。 这里我有一个简单的类库:
cpp文件:
#include "stdafx.h"
#include "ClassLibraryCPP.h"
using namespace ClassLibraryCPP;
void myClass::test()
{
Console::WriteLine("hello cpp/cli!");
}
标题文件:
#pragma once
using namespace System;
namespace ClassLibraryCPP
{
public class myClass
{
public:
void test();
};
}
现在这是我的c#console:
using ClassLibraryCPP;
namespace ConsoleApplicationCS
{
class Program
{
static void Main(string[] args)
{
myClass testClass;
testClass = new myClass();
testClass.test();
}
}
}
我得到了这个:
'myClass'不包含'test'的定义,也没有扩展名 方法'test'接受'myClass'类型的第一个参数可能是 发现(您是否缺少using指令或程序集引用?)
但我已将myClass
和test
方法设为public
,那么为什么.test()
对于控制台应用程序不可见?
更新: 添加ref以创建托管类,然后重建C ++项目(通过右键单击并重建而不仅仅是重建解决方案)解决了问题。 我也发现这个问题有关: C# code can't "see" the methods in my C++ dll 我仍然不明白这是如何工作的: https://www.youtube.com/watch?v=xTRTY-fOIe8&t=1800s
答案 0 :(得分:4)
管理您的课程:
public ref class myClass
{
public:
void test();
};
更改方法声明:
void ClassLibraryCPP::myClass::test()
{
Console::WriteLine("hello cpp/cli!");
}