powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++ и NET
12 сообщений из 12, страница 1 из 1
C++ и NET
    #39386231
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После длительного перерыва пришлось таки делать проект на уже полузабытом С++. До этого работал с C#. Однако хочется использовать и предыдущие наработки С#.
Вопрос такой: можно ли в одном проекте С++ объединить неуправляемый и управляемый коды? И, если возможно, то как это организовать?

"Есть многое на свете, друг Горацио, что и не сразу в голову придет."
М. Твен "Приключения Геккельбери Финна"
...
Рейтинг: 0 / 0
C++ и NET
    #39386247
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAВопрос такой: можно ли в одном проекте С++ объединить неуправляемый и управляемый коды?


Можно.

YUBAИ, если возможно, то как это организовать?


Есть два пути.

0) Использовать т.н. managed C++, это по сути не С++, а некий гибрид С++ и С#.
1) Использовать С++ dll и интерфейс к нему из C#. Возможно, с использованием COM/OLE.
...
Рейтинг: 0 / 0
C++ и NET
    #39386275
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЕсть два пути.
0) Использовать т.н. managed C++, это по сути не С++, а некий гибрид С++ и С#.
1) Использовать С++ dll и интерфейс к нему из C#. Возможно, с использованием COM/OLE.
Это понятно. Однако имеется в виду один проект, без надстроек DLL, COM и пр.
Вот только что нашел - __nogc Явное объявление неуправляемого типа. . Но это относится к старым версиям С++.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
// keyword__nogc_2.cpp
// compile with: /clr:oldSyntax
#using <mscorlib.dll>
using namespace System;

__nogc class X {
public:
   int i;
};

int main() {
   X* x;   // declares an unmanaged pointer of type X
   x = new X();   // creates unmanaged object of type X on the C++ heap
   Console::WriteLine(x->i);

   x->i = 4;   // modifies unmanaged object
   Console::WriteLine(x->i);

   delete x;   // call C++ delete operator to clean up resource
}

.
...
Рейтинг: 0 / 0
C++ и NET
    #39386346
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
C++ и NET
    #39386367
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl, спасибо, это тоже безусловно нужно, но речь о непосредственном совмещении управляемого и неуправляемого кода С++ в пределах, скажем, даже одного cpp файла.
Предыдущий пост показывает такую возможность, но только для старых версий С++. Как тоже самое организовать в VS 2015 пока непонятно. Копаю.))
...
Рейтинг: 0 / 0
C++ и NET
    #39386368
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В книгах до C# утверждают что вроде как можно куда угодно .NET впендюрить, но вскользь это упоминают, без конкретики.
...
Рейтинг: 0 / 0
C++ и NET
    #39386370
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВ книгах до C# утверждают что вроде как можно куда угодно .NET впендюрить, но вскользь это упоминают, без конкретики. Речь о С++. А вообще, когда знаешь - все просто.))
Пока нарыл managed, unmanaged , но экзмпл корявый и работать не будет.
...
Рейтинг: 0 / 0
C++ и NET
    #39386374
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAРечь о С++
Я про тоже, утверждается что .net можно в любой код интегрировать, не обязательно на C# писать с нуля, но без подробностей.
...
Рейтинг: 0 / 0
C++ и NET
    #39386377
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совмещать можно только в одной парадигме. Соотвественно, только C++/CLI (ранее Managed C++)
...
Рейтинг: 0 / 0
C++ и NET
    #39386395
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В этом виде код из экземпла МS - managed, unmanaged уже рабочий.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
// ConsoleApplication4.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"

// pragma_directives_managed_unmanaged.cpp  
// compile with: /clr  
#include <stdio.h>  

// func1 is managed  
void func1() {
	System::Console::WriteLine("In managed function.");
}

// #pragma unmanaged  
// push managed state on to stack and set unmanaged state  

#pragma unmanaged //managed(push, off)  
// func2 is unmanaged  
void func2() {
	printf("In unmanaged function.\n");
}

// #pragma unmanaged  
#pragma managed //(pop)  
// main is managed  
int main() {
	func1();
	func2();
}

С единственной еуправляемой функцией printf("In unmanaged function.\n");
...
Рейтинг: 0 / 0
C++ и NET
    #39386413
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS фукцию main() можно сделать как управляемой - #pragma managed, так и неуправляемой - #pragma unmanaged. Приложение будет нормально компилироваться и функционировать в обоих случаях. А вот func2() управляемой (managed) сделать нельзя, т.к. printf() может работать только unmanaged среде.
...
Рейтинг: 0 / 0
C++ и NET
    #39386558
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAно речь о непосредственном совмещении управляемого и неуправляемого кода С++ в пределах, скажем, даже одного cpp файла.
можно, но проще убить себя об стену.

Реально имеет смысл для написания врапперов в обе стороны, но удовольствие от этой писанины ниже среднего.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++ и NET
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]