Используя С++-cli, как я могу создать экземпляр формы WinForms, определенной в библиотеке С#?

Извините, если на этот вопрос уже был ответ, но я не смог его найти.

Я пытаюсь открыть форму C#, когда вызывается функция в программе C++ (основная программа находится в C++-cli, форма в C#, это пустая форма, просто чтобы попробовать, как это работает). Я использую Visual Studio 2005, и у меня есть оба проекта в моем решении. Проект C# — это просто форма, и я настроил ее как библиотеку классов. Однако, когда я перехожу к функции программы C++, я сначала набираю это:

int _stdcall Init(void)
{
...
FormProject::Form1 form1;
form1 = new FormProject::Form1::Form1();
form1.something();
...
}

У меня мало опыта в C++, я пробовал разные комбинации, но мне не повезло. Проект C++ стал совместимым с CLI. Я уже включил необходимое:

#using <System.Windows.Forms.dll>
#using <System.dll>

Я знаю, что есть некоторые большие ошибки, но мне нужно только запустить эту форму, не более того. Большое спасибо.

Изменить: я уже добавил ссылки.


person Hiperi0n    schedule 20.02.2009    source источник


Ответы (3)


Если я вас понимаю, я думаю, вам нужно создать экземпляр объекта C#, используя усовершенствования синтаксиса C++/CLI. Например, код, который вы разместили, должен быть:

FormProject::Form1^ form1;
form1 = gcnew FormProject::Form1::Form1();  // or FormProject::Form1()
form1->something();

Я предлагаю вам создать новый проект WinForms на управляемом C++ и просто посмотреть на сгенерированный код на наличие правильного синтаксиса.

person Jeremy    schedule 20.02.2009
comment
Да, ссылки уже добавлены. Я предполагаю, что это две мои проблемы, #using плюс синтаксис CLI... - person Hiperi0n; 20.02.2009

Проекту C++/CLI потребуется добавить ссылку на проект C#, прежде чем вы сможете использовать типы в своей библиотеке C#.

person Judah Gabriel Himango    schedule 20.02.2009

Вы добавили ссылку на FormProject в свой проект C++? Если вы это сделали, включили ли вы оператор #using для пространства имен FormProject?

person Harper Shelby    schedule 20.02.2009