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

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


Можно.

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


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

0) Использовать т.н. managed C++, это по сути не С++, а некий гибрид С++ и С#.
1) Использовать С++ dll и интерфейс к нему из C#. Возможно, с использованием COM/OLE.
...
Рейтинг: 0 / 0
17.01.2017, 17:29
    #39386275
YUBA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ и NET
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
17.01.2017, 19:22
    #39386346
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ и NET
...
Рейтинг: 0 / 0
17.01.2017, 20:01
    #39386367
YUBA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ и NET
Siemargl, спасибо, это тоже безусловно нужно, но речь о непосредственном совмещении управляемого и неуправляемого кода С++ в пределах, скажем, даже одного cpp файла.
Предыдущий пост показывает такую возможность, но только для старых версий С++. Как тоже самое организовать в VS 2015 пока непонятно. Копаю.))
...
Рейтинг: 0 / 0
17.01.2017, 20:05
    #39386368
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ и NET
В книгах до C# утверждают что вроде как можно куда угодно .NET впендюрить, но вскользь это упоминают, без конкретики.
...
Рейтинг: 0 / 0
17.01.2017, 20:10
    #39386370
YUBA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ и NET
Dima TВ книгах до C# утверждают что вроде как можно куда угодно .NET впендюрить, но вскользь это упоминают, без конкретики. Речь о С++. А вообще, когда знаешь - все просто.))
Пока нарыл managed, unmanaged , но экзмпл корявый и работать не будет.
...
Рейтинг: 0 / 0
17.01.2017, 20:14
    #39386374
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ и NET
YUBAРечь о С++
Я про тоже, утверждается что .net можно в любой код интегрировать, не обязательно на C# писать с нуля, но без подробностей.
...
Рейтинг: 0 / 0
17.01.2017, 20:17
    #39386377
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ и NET
Совмещать можно только в одной парадигме. Соотвественно, только C++/CLI (ранее Managed C++)
...
Рейтинг: 0 / 0
17.01.2017, 20:39
    #39386395
YUBA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ и NET
В этом виде код из экземпла М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
17.01.2017, 20:56
    #39386413
YUBA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ и NET
PS фукцию main() можно сделать как управляемой - #pragma managed, так и неуправляемой - #pragma unmanaged. Приложение будет нормально компилироваться и функционировать в обоих случаях. А вот func2() управляемой (managed) сделать нельзя, т.к. printf() может работать только unmanaged среде.
...
Рейтинг: 0 / 0
18.01.2017, 06:04
    #39386558
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ и NET
YUBAно речь о непосредственном совмещении управляемого и неуправляемого кода С++ в пределах, скажем, даже одного cpp файла.
можно, но проще убить себя об стену.

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


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