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

Значения из формы переслать в программу срр - C++

Восстановить пароль Регистрация
 
KokosSPb
32 / 82 / 3
Регистрация: 03.02.2011
Сообщений: 463
02.03.2012, 09:37     Значения из формы переслать в программу срр #1
Народ, вот у меня есть наметки программы, которую я буду использовать, там есть код, который написан консольно. Как теперь мне подключить к этому коду форму, например с textBox, так чтоб я мог данные из формы передать на выполнение - программе?
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <windows.h>
#include <GL/glut.h>
#include <conio.h>
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "glut32.lib")
 
using std::cout;
using std::cin;
 
using namespace System;
 
void init(void){
    glClearColor(1.0,1.0,1.0,0.0);
    glMatrixMode(GL_PROJECTION);
    gluOrtho2D(0.0,200.0,0.0,150.0);
    glMatrixMode(GL_MODELVIEW);
}
static int yOld,yNew,x=0;
void LineSegment(void){
    int l;
    l=2;
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0,0.0,0.0);
    glPushMatrix();
    glTranslatef(-x,0.0f,0.0f);
    glBegin(GL_LINE_STRIP);
    glVertex2i(l,yOld);
    l++;
    glVertex2i(l,yNew);
    glEnd();
    glPopMatrix();
    l++;
    glFlush();
}
 
int main(int argc,char** argv)
{   
    cout << "Enter yOld"<<endl;
    cin >> yOld;
    cout << "Enter yNew"<<endl;
    cin >> yNew;
 
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
    glutInitWindowPosition(50,100);
    glutInitWindowSize(400,300);
    glutCreateWindow("OpenGL окошко");
    init();
    glutDisplayFunc(LineSegment);
    glutMainLoop();
    return 0;
}
С консоли всё вводится, рисует - как мне надо, а вот подключить форму - не удается, куча ошибок вылезает
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2012, 09:37     Значения из формы переслать в программу срр
Посмотрите здесь:

перевести из Паскаля в Срр C++
C++ срр файл в нутри срр
if then else => на срр C++
C++ Напишите программу, которая выдает запрос на ввод значения часов и значения минут.
C++ 3 файла: 1 - хэдер-файл и 2 простых .срр
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,645
Записей в блоге: 17
05.03.2012, 14:52     Значения из формы переслать в программу срр #2
Думаю не как, нужно код переносить в проект с формой.
KokosSPb
32 / 82 / 3
Регистрация: 03.02.2011
Сообщений: 463
05.03.2012, 14:55  [ТС]     Значения из формы переслать в программу срр #3
хорошо, просто с консольного файла переносить на срр файл проекта с формой?
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,645
Записей в блоге: 17
05.03.2012, 15:03     Значения из формы переслать в программу срр #4
Ну да создать проект с формой и внего записывать,а содержимое функции main впишиш в обработчик кнопки к примеру.
Ну и заменишь :
C++
1
2
3
4
cout << "Enter yOld"<<endl;
        cin >> yOld;
        cout << "Enter yNew"<<endl;
        cin >> yNew;
визуальными компонентами.
KokosSPb
32 / 82 / 3
Регистрация: 03.02.2011
Сообщений: 463
05.03.2012, 15:12  [ТС]     Значения из формы переслать в программу срр #5
я пробовал, не получилось ну я еще попробую, раз вариантов нету
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,645
Записей в блоге: 17
05.03.2012, 15:25     Значения из формы переслать в программу срр #6
А что пишит?

Добавлено через 3 минуты
Если пишиш на Builder-e, надо выкинуть
C++
1
2
3
4
5
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <windows.h>
#include <conio.h>
KokosSPb
32 / 82 / 3
Регистрация: 03.02.2011
Сообщений: 463
05.03.2012, 15:40  [ТС]     Значения из формы переслать в программу срр #7
на VisualStudio 2008? уже не помню где ругается, только я буду пытаться запускать OpenGL окно, не знаю - получится ли?
raxp
10140 / 6527 / 475
Регистрация: 28.12.2010
Сообщений: 21,167
Записей в блоге: 1
05.03.2012, 18:46     Значения из формы переслать в программу срр #8
...а из визуальной программы разве с консолью вы работать не можете? СreatePipe(), CreateProcess(), StdOutPipeWrite, StdOutPipeRead. Оно конечно две программы.
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,645
Записей в блоге: 17
05.03.2012, 18:57     Значения из формы переслать в программу срр #9
А при чем тут VCL ?
Almiqui
Почетный модератор
 Аватар для Almiqui
13977 / 3593 / 87
Регистрация: 11.06.2009
Сообщений: 11,800
05.03.2012, 19:33     Значения из формы переслать в программу срр #10
Avazart, убрано из названия темы.
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,645
Записей в блоге: 17
05.03.2012, 20:07     Значения из формы переслать в программу срр #11
Попробуй сначала добавить в чистый проект
C++
1
#include <GL/glut.h>
Вдруг у тебя его нет? Прокомпиль, ошибки выложи.
Потом добавь функции init, LineSegment, и глобальные переменные
KokosSPb
32 / 82 / 3
Регистрация: 03.02.2011
Сообщений: 463
06.03.2012, 09:27  [ТС]     Значения из формы переслать в программу срр #12
Цитата Сообщение от Avazart Посмотреть сообщение
А при чем тут VCL ?
Сплю CLR конечно

Добавлено через 2 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Попробуй сначала добавить в чистый проект
#include <GL/glut.h>

Вдруг у тебя его нет? Прокомпиль, ошибки выложи.
Потом добавь функции init, LineSegment, и глобальные переменные
Через пустой проект работает всё. Создается форма, рисуется нужная линия
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,645
Записей в блоге: 17
06.03.2012, 10:26     Значения из формы переслать в программу срр #13
Ну тогда в чем проблема?
KokosSPb
32 / 82 / 3
Регистрация: 03.02.2011
Сообщений: 463
06.03.2012, 11:01  [ТС]     Значения из формы переслать в программу срр #14
Цитата Сообщение от Avazart Посмотреть сообщение
А что пишит?

Добавлено через 3 минуты
Если пишиш на Builder-e, надо выкинуть
C++
1
2
3
4
5
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <windows.h>
#include <conio.h>
Ошибка
error C2664: glutDisplayFunc: невозможно преобразовать параметр 1 из 'void (__clrcall *)(void)' в 'void (__cdecl *)(void)'
1> Конечному типу не соответствует ни одной функции с данным именем в области видимости


Код 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#pragma once
#include <tchar.h>
#include <windows.h>
#include <GL/glut.h>
#include <iostream>
#include <conio.h>
#pragma comment(lib, "opengl32.lib") //сообщаем линковщику, что мы будет использовать библиотеки opengl32, glu32. 
#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "glut32.lib")
 
namespace BaseWinForm1 {
 
    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>
    /// Сводка для Form1
    ///
    /// Внимание! При изменении имени этого класса необходимо также изменить
    ///          свойство имени файла ресурсов ("Resource File Name") для средства компиляции управляемого ресурса,
    ///          связанного со всеми файлами с расширением .resx, от которых зависит данный класс. В противном случае,
    ///          конструкторы не смогут правильно работать с локализованными
    ///          ресурсами, сопоставленными данной форме.
    /// </summary>
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();
            //
            //TODO: добавьте код конструктора
            //
        }
 
    protected:
        /// <summary>
        /// Освободить все используемые ресурсы.
        /// </summary>
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
        }
 
    protected: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
    private: System::ComponentModel::IContainer^  components;
 
    private:
        /// <summary>
        /// Требуется переменная конструктора.
        /// </summary>
 
 
#pragma region Windows Form Designer generated code
        /// <summary>
        /// Обязательный метод для поддержки конструктора - не изменяйте
        /// содержимое данного метода при помощи редактора кода.
        /// </summary>
        void InitializeComponent(void)
        {
            this->SuspendLayout();
            // 
            // Form1
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(567, 262);
            this->Name = L"Form1";
            this->Text = L"Form1";
            this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);
            this->ResumeLayout(false);
 
        }
 
 
#pragma endregion
static void init(void){
    glClearColor(1.0,1.0,1.0,0.0);
    glMatrixMode(GL_PROJECTION);
    gluOrtho2D(0.0,200.0,0.0,150.0);
}
 
static void LineSegment(void){
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0,0.0,0.0);
    glBegin(GL_POINTS);
        glVertex2i(180,15);
        glVertex2i(10,145);
    glEnd();
    glFlush();
}
    private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
int argc;
char** argv;
 
 
 
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
//  glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
    glutInitWindowPosition(50,100);
    glutInitWindowSize(400,300);
    glutCreateWindow("OpenGL окошко");
    init();
    glutDisplayFunc(LineSegment);
 
 
    glutMainLoop();
 
             }
};
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
06.03.2012, 13:30     Значения из формы переслать в программу срр #15
error C2664: glutDisplayFunc: невозможно преобразовать параметр 1 из 'void (__clrcall *)(void)' в 'void (__cdecl *)(void)'
Cудя по этой ошибке что-то мне подсказывает, что юзать OpenGL из CLR не самая хорошая идея. Или хотя бы стоит обернуть в unsafe.

Добавлено через 38 секунд
http://msdn.microsoft.com/en-us/libr...8VS.80%29.aspx
KokosSPb
32 / 82 / 3
Регистрация: 03.02.2011
Сообщений: 463
06.03.2012, 16:30  [ТС]     Значения из формы переслать в программу срр #16
Цитата Сообщение от ForEveR Посмотреть сообщение
unsafe
перерыл всё до куда дотянулся, не нашел такой функции в с++

по ссылке тоже не совсем понял - зачем ты мне её дал...
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
06.03.2012, 17:59     Значения из формы переслать в программу срр #17
KokosSPb, Ах да. Не unsafe, а unmanaged. Суть ошибки в том, что в clr и нативе используются разные соглашения вызова.
KokosSPb
32 / 82 / 3
Регистрация: 03.02.2011
Сообщений: 463
11.03.2012, 12:20  [ТС]     Значения из формы переслать в программу срр #18
Цитата Сообщение от ForEveR Посмотреть сообщение
KokosSPb, Ах да. Не unsafe, а unmanaged. Суть ошибки в том, что в clr и нативе используются разные соглашения вызова.
Тоже убил немало времени, не понял как мне его обернуть в unmanagment можно как-нибудь вылечить их разногласия по вызову?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2012, 14:40     Значения из формы переслать в программу срр
Еще ссылки по теме:

C++ Последняя официальная документация по стандарту СРР
C++ нужно найти Глобальные Переменные в .срр файле
C++ Адресация на другой срр файл

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
11.03.2012, 14:40     Значения из формы переслать в программу срр #19
cdecl

Основной способ вызова для Си (отсюда название, сокращение от «c-declaration»). Аргументы передаются через стек, справа налево. Очистку стека производит вызывающая программа. Это основной способ вызова функций с переменным числом аргументов (например, printf(…))
clrcall
http://msdn.microsoft.com/en-us/libr...=VS.80%29.aspx

Добавлено через 11 минут
И насколько я могу вписаться в это все, я не могу понять зачем тебе работать из managed C++ OpenGL. Тем не менее, насколько я понимаю, импорт этих функций должен производится по другому.

Добавлено через 12 минут
Импорт по идее что-то вроде такого для функции glutDisplayFunc
C#
1
2
[DllImport(/*название либы*/, SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
static extern void glutDisplayFunc(IntPtr func);
Рекомендую Класс Marshal, использование PInvoke, небезопасный код (unsafe) пункт 4.
Yandex
Объявления
11.03.2012, 14:40     Значения из формы переслать в программу срр
Ответ Создать тему
Опции темы

Текущее время: 13:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru