Ошибки компоновщика с использованием DirectX и Visual Studio 2010 - PullRequest
1 голос
/ 20 июля 2011

Итак, я работал над этим в течение большей части двух часов, и, хотя я, кажется, следую точным инструкциям каждого форума / руководства в Интернете, я все еще получаю ошибки компоновщика, пытаясь использовать DirectX с VisualStudio 2010.

Вот код, с которого я начинаю:

#include <D3DX10.h>  
#include <iostream>   
using namespace std;

ostream& operator<<(ostream& os, D3DXVECTOR3& v){  
      os << "(" << v.x << ", " << v.y << ", " << v.z << ")\n";     
      return os; 
}

int main (){  
    return 0;  
}

У меня загружен и установлен SDK, и я вручную настроил соответствующие каталоги include и библиотеки всвойства конфигурации проекта.Я также настроил дополнительные входные зависимости компоновщика:

d3dx10.lib
d3dx10d.lib

Однако при компиляции по-прежнему появляются следующие ошибки:

1> MSVCRTD.lib (crtexew.obj): ошибка LNK2019: неразрешенный внешний символ WinMain @ 16, указанный в функции _ _tmainCRTStartup

1> C: \ Users \ Ben \ Documents \ Visual Studio 2010\ Projects \ DX Practice \ Debug \ DX Practice.exe: фатальная ошибка LNK1120: 1 неразрешенная внешняя информация

Любая и вся помощь приветствуется.

РЕДАКТИРОВАТЬ: изменено int main () на int WinMain ().Новые ошибки:

1> c: \ users \ ben \ documents \ visual studio 2010 \ projects \ dx practice \ dx practice \ main.cpp (10): предупреждение C4007: 'WinMain': должен быть '__stdcall'

1> c: \ users \ ben \ documents \ visual studio 2010 \ projects \ dx practice \ dx practice \ main.cpp (10): ошибка C2731: «WinMain»: функция не может быть перегружена

1> c: \ users \ ben \ documents \ visual studio 2010 \ projects \ dx practice \ dx practice \ main.cpp (10): см. Объявление «WinMain»

EDIT2: понялout -

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

Спасибо всем за помощь:)

Ответы [ 2 ]

4 голосов
/ 20 июля 2011

Если вы не используете специальные настройки в Visual Studio, оконные исполняемые файлы начинаются с функции WinMain, а не с обычной функции main. Поэтому вам следует либо создать консольное приложение, либо использовать WinMain, либо использовать настройку для использования обычной функции main.

Обратите внимание, что запуск с WinMain не требуется для фактического создания окон. Это просто соглашение Visual Studio.

Возможность использовать обычный main находится в разделе «Linker-> Advanced» в диалоговом окне «Параметры проекта». Она называется «Точка входа», и для использования обычного main вы используете «mainCRTStartup» в качестве значения.


Если вы настаиваете на использовании WinMain, то вам нужно определить его правильно:

int WINAPI WinMain( HINSTANCE   hInstance,          // Instance
                   HINSTANCE    hPrevInstance,      // Previous Instance
                   LPSTR        lpCmdLine,          // Command Line Parameters
                   int          nCmdShow)           // Window Show State
1 голос
/ 20 июля 2011

Если вы включите заголовки Windows, то компоновщик ожидает, что вы предоставите функцию WinMain, а не обычную main.Точка входа WinMain предоставляет данные для Windows, такие как HINSTANCE s.

...