2016-11-22 3 views
1

Ich bin ziemlich neu in der Programmierung und Compiler. Ich hatte eine 1-jährige C++ - Klasse in der Universität. Letzten Monat habe ich ein Projekt gestartet, bei dem ich einige Prozesse für die Arbeit automatisieren wollte. Das Programm nimmt ein Telefonverzeichnis und erstellt dann .cfg-Dateien daraus. Nichts sehr fortgeschritten, vor allem Lesen, Speichern und Schreiben von Daten.Verwenden von GetOpenFileName in Dev C++, VS

Ich habe mein Projekt mit Dev C++ IDE gemacht. Es funktioniert gut und es ist einfach für einen Anfänger wie mich zu verwenden. In letzter Zeit habe ich versucht, eine Visual C++ - Funktion namens GetOpenFileName zu verwenden. Ich habe ein Beispiel aus dem Internet, aber es lässt sich nicht kompilieren in Dev C++ .... Hier ist das Beispiel:

#include "stdafx.h" 
#include <windows.h> 
#include <Commdlg.h> 
// 
// Gobal Variables and declarations. 
// 
OPENFILENAME ofn ; 
// a another memory buffer to contain the file name 
char szFile[100] ; 
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , LPSTR lpCmdLine , int nCmdShow) 
{ 

    // open a file name 
    ZeroMemory(&ofn , sizeof(ofn)); 
    ofn.lStructSize = sizeof (ofn); 
    ofn.hwndOwner = NULL ; 
    ofn.lpstrFile = szFile ; 
    ofn.lpstrFile[0] = '\0'; 
    ofn.nMaxFile = sizeof(szFile); 
    ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0"; 
    ofn.nFilterIndex =1; 
    ofn.lpstrFileTitle = NULL ; 
    ofn.nMaxFileTitle = 0 ; 
    ofn.lpstrInitialDir=NULL ; 
    ofn.Flags = OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST ; 
    GetOpenFileName(&ofn); 

    // Now simpley display the file name 
    MessageBox (NULL , ofn.lpstrFile , "File Name" , MB_OK); 
    return 0; 
} 

Ich verstehe das VC++ und ich bin Codierung in C++, meine Frage ist: ist es möglich, damit es in Dev C++ funktioniert und wie?

bekomme ich folgende Fehlermeldung:

C: \ Users Gabriel \ Dokumente \ \ Programme \ Test \ main.o main.cpp :(Text + 0xB4):. undefined reference to `__imp_GetOpenFileNameA‘

Ich habe versucht, eine andere IDE (Microsoft Visual Studio 2015 mit dem C++ Paket) zu installieren. In VS wird mein Code überhaupt nicht kompiliert (aber in Dev C++ kompiliert). Ich erhalte eine Last von Fehlern:

2015 \ projects \ ConsoleApplication1 \ ConsoleApplication1 \ consol eapplication1.cpp (23): Fehler C2440: '=': aus 'char [100]' nicht konvertieren ' LPWSTR '1> c: \ Benutzer \ gabriel \ Dokumente \ Visual Studio 2015 \ Projekte \ consoleapplication1 \ consoleapplication1 \ consol eapplication1.cpp (23): Hinweis: Typen, auf die verwiesen wird, sind nicht verwandt; Umwandlung erfordert reinterpret_cast, C-Casts oder funktions Casts

Es ist etwas, das ich nicht bekommen ... Warum mein Code nicht in VS nicht kompilieren, aber es funktioniert in Dev C++? Ich habe gehört, dass der VS-Compiler "veraltet" ist. Irgendeine Möglichkeit, es zu aktualisieren?

Oder gibt es eine Möglichkeit VC++ in Dev C++ zu verwenden?

+0

Viele Leute out-of-date Visual C++ Compiler verwenden, aber die, die Sie in VS 2015 gebündelt haben, ist ziemlich neu (und Sie können eine noch neuere Version kostenlos zu bekommen, ist die Release Candidate von Visual Studio 2017 öffentlich jetzt) ​​ –

+0

'__imp_GetOpenFileNameA' - Das ist ein Linker-Fehler, kein Compiler-Fehler. Sie haben nicht die erforderlichen Win32-Importbibliotheken zu Ihrem Projekt hinzugefügt. – PaulMcKenzie

+0

@PaulMcKenzie: Ich denke, Gabriel weiß, dass er sagte, „es ist nicht in VS nicht kompiliert“ (wahrscheinlich Probleme Header-Konfiguration vorkompilierte), dann „aber es funktioniert in Dev C++“. Er weiß also, dass er den Kompilierungsschritt in Dev C++ hinter sich hat. –

Antwort

0

Die Funktion Sie versuchen zu hat a documentation page on MSDN zu nennen, und in dieser Seite sagt Ihnen, die Build-Anforderungen:

enter image description here

Die comdlg32.lib Import-Bibliothek stellt die fehlende __imp_GetOpenFileNameA Symbol, dass der Linker für sucht . Fügen Sie es zu Ihren Verknüpfungseinstellungen hinzu (es ist Teil des Windows SDK, das von Visual Studio installiert wurde und Sie möglicherweise eine andere Kopie von Dev C++ haben)

Ich könnte Ihnen sagen, wo Linkeinstellungen in Visual C++ finden, aber obwohl ich weiß, Dev C++ hat sie auch, ich benutze es nicht selbst und habe keine Ahnung wo.

Wenn Dev C++ Compiler (gcc-basiert, richtig?) Nicht weiß, was mit einer Import-Bibliothek zu tun, übergeben Sie seinen Linker den Namen der DLL (comdlg32.dll) statt.

+0

Es kompiliert! Vielen Dank, ich werde versuchen zu lernen, wie man es jetzt benutzt :) – Gabriel