Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.76
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
#1

Программа на С++ и CLR - C++

23.09.2010, 21:38. Просмотров 2240. Ответов 14
Метки нет (Все метки)

Проблема в следующем.
1) не знаю куда опубликовать конкретно эту тему, ибо тут пересечение двух разных веток. Поэтому опишу в главном. Модеры, если посчитаете нужным - перенесите.

2) Попросил у преподавателя задачку посложнее того уровня, что мы проходим сейчас. Видимо он решил меня поставить на место и спросив знаю ли я CLR и получив отрицательный ответ, дал эту задачку. Но я решил ее сделать. Единственное что. Задание звучит приблизительно так. Нужна функция на обычном С++, которая вызывает функцию с CLR, а функция с CLR должна вызывать обычную функцию. То есть всего две функции, но в разном формате.

Теперь вопрос. Я не прошу ни примеров, ни кодов, с CLR как-нибудь разберусь. Вопрос лишь в одном. Как это можно совместить? Создавать два проекта разных и один из них делать через DLL, и экспортировать DLL во второй проект или же можно как-то измудриться и сделать один проект и с тем и с другим. Буду благодарен за советы по поводу того как это сделать. Заранее спасибо

Вроде бы что-то сделал. Вроде бы даже по заданию... Подскажите, покатит ли и что стоит изменить, если нужно?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//CLR_test.cpp
 
using namespace System;
 
void fooclr()
{
   extern void cfunc();
   static Int16 i=0;
   while(i++<2)
   {
      String^Str="Call func fooclr()";
      Console::WriteLine(Str);
      cfunc();
   }
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//CLR_test_cpp.cpp
 
#include <string>
#include <iostream>
 
void cfunc()
{
   extern void fooclr();
   static int i=0;
   while(i++<2)
   {
      std::string Str="Call func cfunc()";
      std::cout<<Str<<'\n';
      fooclr();
   }
}
 
int main()
{
   cfunc();
   return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2010, 21:38     Программа на С++ и CLR
Посмотрите здесь:
Visual C++ c++/clr в c#
C++ CLR
Отличие CLR от Win32 C++
Visual C++ Проблемы с параметра /clr ?
Events кнопки свернуть в clr C++ WinAPI
Visual C++ clr,mfc,windows forms
Кольсольное приложение win32 или CLR C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
23.09.2010, 22:13     Программа на С++ и CLR #2
Lavroff, сюдя по данному заданию dll тут не причем. Нужно
Цитата Сообщение от Lavroff Посмотреть сообщение
как-то измудриться и сделать один проект и с тем и с другим.
Для этого создай один проект с поддержкой CLR.
В данном проекте напиши три функции: две не использующие приблуды CLR, вроде управляемых классов, а одну с использованием CLR (как приведенная тобою со String). Из первой вызови третью, из третьей вторую. Это практически у тебя и сделано.
Думаю, как то так.
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
23.09.2010, 22:22  [ТС]     Программа на С++ и CLR #3
CyBOSSeR, Ограничения я правильно поставил? А то выходило переполнение стека, потому как функции вызывались бесконечно.

То есть. Одну с clr как у меня, две С++, то есть одна обычная и main? Из main вызывать с clr, из clr C++, из C++ clr, или можно оставить так как есть?
HIMen
4125 / 1374 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
23.09.2010, 22:30     Программа на С++ и CLR #4
Только вот fooclr сложно назвать clr-функцией - она не вложена в управляемый класс
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
23.09.2010, 22:36  [ТС]     Программа на С++ и CLR #5
HIMen, Да. Но в ней синтаксис управляемого С++.
HIMen
4125 / 1374 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
23.09.2010, 22:41     Программа на С++ и CLR #6
Lavroff, и что? Ты же не можешь вызвать ее, например из c# без platform invoke.
Она такая же как и int main(){}. Компилятор может вообще inline сделать
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
23.09.2010, 22:42     Программа на С++ и CLR #7
Думаю как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
void Print(wchar_t ch) {
  std::wcout << ch;
}
 
ref class cliClass {
public:
  static void PrintTestString() {
    using namespace System;
 
    String^ str = "This is the test string";
 
    for (Int32 i = 0; i < str->Length; ++i)
      Print(str[i]);
  }
};
 
int main() {
  cliClass::PrintTestString();
 
  return 0;
}
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
23.09.2010, 22:44  [ТС]     Программа на С++ и CLR #8
HIMen, Дык у меня и не было цели написать функцию которая пойдет на всех платформах поддерживающих .NET. Но спасибо за замечание, посмотрю.


CyBOSSeR, Интересно. Спасибо
alex_x_x
23.09.2010, 23:01
  #9

Не по теме:

это тот преподователь, на которого гнали, что он stl не знает?

ForEveR
23.09.2010, 23:02  [ТС]
  #10

Не по теме:

alex_x_x, Я бы не сказал, что я на него гнал. Я только спросил в тот раз как мне быть. Но да, именно он

ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
28.09.2010, 22:38  [ТС]     Программа на С++ и CLR #11
Ммм. И снова я тут.
Проблема:

CliTest.h
C++
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
31
32
#pragma once
 
using namespace System;
 
extern void Print(wchar_t);
 
ref class CliTest
{
public:
    void foo();
    void PrintIt();
private:
    String^ Str;
};
 
void CliTest::foo()
{
    String^Strc=Console::ReadLine();
    Str=Strc;
    PrintIt();
}
 
void CliTest::PrintIt()
{
    Int32 i=0;
    for each(wchar_t p in Str)
    {
        Print(Str[i]);
        ++i;
    }
    Console::WriteLine();
}


CPPTest.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "CLITest.h"
 
#include <iostream>
 
void Print(wchar_t p)
{
    std::wcout<<p;
}
 
int main()
{
    CliTest Ob;
    Ob.foo();
    return 0;
}


И как быть - хз. Так то оно конечно работает. Но мне нужно обязательно два CPP файла. В одном CLI в другом чистые плюсы. Включать C++ файл это нехорошо. С хедером конечно прекрасно, но нужны именно исходные файлы. Кто может подсказать, как лучше сделать?) Класс внешним я так понимаю сделать невозможно
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.09.2010, 22:43     Программа на С++ и CLR #12
Цитата Сообщение от Lavroff Посмотреть сообщение
Класс внешним я так понимаю сделать невозможно
Правильно понимаешь.
Lavroff, мне кажеться, что ты явно что-то попутал про только 2 исходных файла. Исходные файлы не предназначаны для описания классов.
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
28.09.2010, 22:46  [ТС]     Программа на С++ и CLR #13
CyBOSSeR, Два исходных. По этому я про DLL и завел разговор в самом начале темы... Только через DLL получается?
Кстати. Если только с функциями - то работает. С классами - нет.
А про классы он ничего не говорил абсолютно. Просто про две функции, которые вызывают друг друга. Одна CLI, вторая C++
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.09.2010, 22:55     Программа на С++ и CLR #14
Lavroff, dll - это слишком маловероятно, даже не стоит думать.
Хм... Исходя из того, что ты его правильно понял про отсутсвие заголовочных файлов, то напрашивается только одно - CLI функцией является свободная функция, содержащая обращения к управляемым классам.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2010, 23:28     Программа на С++ и CLR
Еще ссылки по теме:
Win32 vs CLR, какая технология предпочтительней? C++
В чём писать, в MFC или CLR? Visual C++
Считывание чисел из TextBox и запись в массив (CLR) Visual C++
Как скомпилировать CLR программу в статический .exe? C++
Visual C++ Visual studio CLR приложение не работает на другом компьютере

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
28.09.2010, 23:28  [ТС]     Программа на С++ и CLR #15
CyBOSSeR, То есть. Приблизительно то, что было у меня с самого начала?

Добавлено через 24 минуты
Хотелось бы все же узнать. Хотя проверю завтра в любом случае. Результат проверки напишу)
Yandex
Объявления
28.09.2010, 23:28     Программа на С++ и CLR
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru