Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
6 / 6 / 0
Регистрация: 13.03.2010
Сообщений: 79
1

C++ Связь управляемого кода с обычным

05.09.2011, 09:24. Показов 2027. Ответов 3
Метки нет (Все метки)

Всем добрый день.

Пишу графическое приложение (редактор карт для игры) на DirectX9. Всей графикой у меня управляешь класс L_Scene. Через его методы я и рисую и события обрабатываю.

Я объявляю объект этого класса внутри Form1.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
#pragma once
#include "convert.h"
#include "AddObjectForm.h"
L_Scene Scene;
namespace wfeditor {
 
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
 
    /// <summary>
    /// Summary for Form1
    /// </summary>
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();
            //
            //TODO: Add the constructor code here
            //
            Scene.Editor.hWnd = (HWND)panel1->Handle.ToPointer();
            Scene.hWnd = (HWND)panel1->Handle.ToPointer();
            Scene.InitD3D();
        }
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.09.2011, 09:24
Ответы с готовыми решениями:

Компиляция смешанного (управляемого и неуправляемого) кода
Здрасти. Подсобите люди добрые, нужно скомпилировать смешанный код. По всей видимости компилятору...

Безопасность управляемого кода .NET
Прочитал для меня шокирующие заявление в статье журнала argc &amp; argv '...При этом, вам нужно...

Взаимодействие управляемого и не управляемого кода
Есть проект Win32Project1 В Win32Project1 есть функция void Test() { MessageBox( 0,...

Обращение управляемого кода к неуправляемому
1)Вопрос такой как идет обращение неупрвляемого кода к управляемому?Сборщик мусора может чистить...

3
Эксперт .NET
1790 / 1301 / 424
Регистрация: 10.06.2011
Сообщений: 2,106
05.09.2011, 19:29 2
Tilk, Form1 - это класс, а у классов есть поля(переменные) и методы(функции). Очевидно ваш знакомый программист хотел, чтобы вы написали так:
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
#pragma once
#include "convert.h"
#include "AddObjectForm.h"
namespace wfeditor {
 
        using namespace System;
        using namespace System::ComponentModel;
        using namespace System::Collections;
        using namespace System::Windows::Forms;
        using namespace System::Data;
        using namespace System::Drawing;
 
        /// <summary>
        /// Summary for Form1
        /// </summary>
        public ref class Form1 : public System::Windows::Forms::Form
        {
                L_Scene Scene;        \\Находясь здесь, Scene будет полем класса Form1 
 
        public:
                Form1(void)
                {
                        InitializeComponent();
                        //
                        //TODO: Add the constructor code here
                        //
                        Scene.Editor.hWnd = (HWND)panel1->Handle.ToPointer();
                        Scene.hWnd = (HWND)panel1->Handle.ToPointer();
                        Scene.InitD3D();
                }
0
6 / 6 / 0
Регистрация: 13.03.2010
Сообщений: 79
06.09.2011, 02:09  [ТС] 3
Это первое что я попробовал.

Получил тонну ошибок вида

1>d:\projects\wfeditor\wfeditor\Form1.h(491): error C2662: 'L_Editor::RotateZ' : cannot convert 'this' pointer from 'L_Editor' to 'L_Editor &'
1> An object from the gc heap (a dereferenced gc pointer) cannot be converted to a native reference
А перед ними вот такую
1>d:\projects\wfeditor\wfeditor\Form1.h(20): error C4368: cannot define 'Scene' as a member of managed 'wfeditor::Form1': mixed types are not supported
0
Эксперт С++
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
06.09.2011, 21:42 4
Tilk, объекты неуправляемых классов нельзя объявлять в качестве полей управляемых классов. Заместо этого, можно объявлять указатели на неуправляемые типы. В вашем случае заводите указатель на ваш объект в качестве поля класса Form1:

C++
1
L_Scene * Scene;
Инициализируете указатель в конструкторе формы, а в деструкторе производите освобождение памяти из-под указателя:

C++
1
2
3
4
~Form1()
    {
    delete Scene;
    }
Соответственно, обращаться к этому объекту нужно будет уже через указатель.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.09.2011, 21:42

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Быстродействие управляемого и неуправляемого кода
начал изучать небезопасный код,написал прогу в ней 2 функции одна с управляемым кодом вторая...

Не могу вытащить string из управляемого кода
Здравствуйте! столкнулся с проблемой вытаскивания строки из c# в с++... есть код на c# ...

Связь кода JS и CSS
Не могу понять, как сделать следующее. У меня есть код html, с помощью него пользователь выбирает в...

Связь кода и переменной
А можно создать переменную которая будет ссылаться на код. То есть чтобы например в уравнении была...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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