none
error C2381: exit: переопределение; __declspec(noreturn) отличается RRS feed

  • Вопрос

  • Здравствуйте, товарищи. Есть примерно следующее:

    #include <glut.h>
    #include"MainWindow.h"
    #include"windows.h"
    
    using namespace System;
    [System::Runtime::InteropServices::DllImport("user32.dll", SetLastError = true)]
    IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
    [STAThread]
    
    void Display() {
    	glClear(GL_COLOR_BUFFER_BIT);
    	glFlush();
    }
    
    void Initialize() {
    	glClearColor(0.8, 1.0, 0.6, 1.0);
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
    	glOrtho(-200.0, 200.0, -200.0, 200.0, -5.0, 5.0);
    }
    
    int main(int argc, char ** argv) {
    
    	glutInit(&argc, argv);
    	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    	glutInitWindowSize(400, 400);
    	glutInitWindowPosition(0, 0);
    	GLUT::MainWindow ^form = gcnew GLUT::MainWindow;
    	SetParent((IntPtr)FindWindow("GLUT", NULL), form->getPanelHandle());
    	form->Show();
    	glutDisplayFunc(Display);
    	Initialize();
    	glutMainLoop();
    	return 0;
    }

    При попытке сборки вылетает C2381. Самое обидное, что я даже ещё не написал ничего толком, а он уже... Помогите пожалуйста.

Ответы

  • Извините, Леонтий, но у Вас какой-то "винегрет" получился: и WinAPI и WinForms и OpenGL! Может, на какой-то одной технологии сосредоточиться? Окно, в котором можно рисовать при помощи OpenGL, можно создать и без GLUT (могу ссылку на статьи MSDN дать).

    По поводу Вашего вопроса. Скорее всего, в Вашей программе одновременно используется несколько версий библиотеки Си. Нужно, чтобы приложение и все его зависимости (в Вашем случае, glut) ссылались на одну и ту же версию - динамическую, т.к. этого требует .net.


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

Все ответы

  • Извините, Леонтий, но у Вас какой-то "винегрет" получился: и WinAPI и WinForms и OpenGL! Может, на какой-то одной технологии сосредоточиться? Окно, в котором можно рисовать при помощи OpenGL, можно создать и без GLUT (могу ссылку на статьи MSDN дать).

    По поводу Вашего вопроса. Скорее всего, в Вашей программе одновременно используется несколько версий библиотеки Си. Нужно, чтобы приложение и все его зависимости (в Вашем случае, glut) ссылались на одну и ту же версию - динамическую, т.к. этого требует .net.


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

  • Дайте ссылку, погляжу. Всё подобные объяснения, что я видел до этих пор до меня не очень доходили, может тут получше будет.

  • Вот подборка статей об использовании реализации OpenGL для Windows. Идея, в общем, простая:

    1. Выбираете окно, в котором должна отображаться сцена.

    2. Настраиваете для этого окна (точнее, для его контекста HDC) формат пикселей (ChoosePixelFormat, SetPixelFormat).

    3. Создаете контекст OpenGL (wglCreateContext)

    4. Перед началом вывода сцены делаете этот контекст текущим (wglMakeCurrent) и рисуете.

    5. Когда контекст больше не нужен - удаляете его (wglDeleteContext).


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

  • Спасибо. Кстати, может Вы знаете как в GLUT создать окно без рамки? (нигде найти не могу)
  • Спасибо. Кстати, может Вы знаете как в GLUT создать окно без рамки? (нигде найти не могу)
    Никак. Так как программный интерфейс OpenGL кроссплатформенный, в нем нет средств создания окон и обработки событий клавиатуры или мыши. Эта задача возлагается на программный интерфейс ОС (в Windows - это функции с префиксом wgl). А GLUT - это попытка унифицировать создание окна в разных ОС. Поэтому, требовать от нее гибкости в этом вопросе никак нельзя.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

  • Блин. А что тут можно сделать чтобы окно было без рамки?
  • Ну, я, вроде бы, уже описал процедуру рисования в собственном окне без GLUT.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

  • И, кстати, если уж Вам так необходим .NET, из C++/CLI можно вызывать неуправляемые функции WinAPI напрямую (без DllImport).

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

  • Ну хорошо, буду учить.