Я пишу инструмент графического интерфейса в С# для анализа и отображения вывода данных другой программы, написанной на C. Для анализа данных мне нужно знать структуры данных, которые указаны в ряде файлов заголовков C. Таким образом, мне нужно включить эти файлы заголовков C в мой проект С#. Мои вопросы:
1) После некоторых исследований я пришел к выводу, что лучший способ - создать новый проект С++/CLI в моем решении, импортировать файлы заголовков C в этот новый проект, написать несколько классов С++/CLI, которые действуют как тонкие обертки для структур данных, определенных в файлах заголовков C, затем ссылайтесь на классы оболочки С++/CLI из кода С#. Это лучший подход, или есть лучший способ?
2) Я столкнулся с проблемой сравнения. Вот мой упрощенный код, чтобы проиллюстрировать проблему:
Исходный заголовок C в проекте С++/CLI
#define ABC 0x12345
Класс Wrapper в проекте С++/CLI
#include "my_c_header.h"
namespace C_Wrappers {
public ref class MyWrapper {
public:
property unsigned int C_ABC {
unsigned int get() { return ABC; }
}
}
}
Пользовательский класс в проекте С#
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());
}
}
}
В проекте С# я добавил ссылку на проект С++/CLI (используя правый щелчок > Добавить ссылку). Во время сборки я получил ошибку в проекте С#: "Тип или пространство имен" C_Wrappers "не удалось найти (вам не хватает директивы using или ссылки на сборку?).
Я думал, что сделал все, что должен был. Что делать, чтобы исправить эту ошибку?