【发布时间】:2013-10-10 10:13:07
【问题描述】:
我正在用 C# 编写一个 GUI 工具来解析和显示另一个用 C 编写的程序的数据输出。为了解析数据,我需要知道在许多 C 头文件中指定的数据结构。因此,我需要将这些 C 头文件合并到我的 C# 项目中。我的问题是:
1) 经过一番研究,我得出结论,最好的方法是在我的解决方案中创建一个新的 C++/CLI 项目,将 C 头文件导入这个新项目,编写一些充当瘦包装器的 C++/CLI 类对于 C 头文件中定义的数据结构,请从 C# 代码中引用 C++/CLI 包装类。这是最好的方法,还是有更好的方法?
2) 我遇到了参考问题。这是我的简化代码来说明问题:
C++/CLI 项目中的原始 C 头文件
#define ABC 0x12345
C++/CLI 项目中的包装类
#include "my_c_header.h"
namespace C_Wrappers {
public ref class MyWrapper {
public:
property unsigned int C_ABC {
unsigned int get() { return ABC; }
}
}
}
C#项目中的用户类
using C_Wrappers;
using System;
namespace DataViewer {
public partial class MainForm : Form {
private MyWrapper myWrapper = new MyWrapper();
public MainForm() {
Console.WriteLine(myWrapper.C_ABC.ToString());
}
}
}
在 C# 项目中,我添加了对 C++/CLI 项目的引用(使用右键单击 > 添加引用)。在构建期间,我在 C# 项目中遇到错误:“找不到类型或命名空间 'C_Wrappers'(您是否缺少 using 指令或程序集引用?)。”
我以为我做了我应该做的一切。我应该怎么做才能修复这个错误?
【问题讨论】:
-
您是否确保首先编译 C++/CLI 项目(如在 C# 项目之前编译)?如果 C# 先编译并且没有为 CLI 项目生成 dll,它会这样说。
-
C++/CLI 命名空间是否在另一个命名空间中?使用对象浏览器进行查看。
-
你是否也在这两个项目之间放置了一个“项目依赖”......
-
@HansPassant C++/CLI项目中只有一个命名空间,如图所示。
-
@alexbuisson - 我检查了,C# 项目依赖于 C++/CLI 项目
标签: c# dependencies c++-cli dependency-management