在 Dev C++、VS 中使用 GetOpenFileName

Using GetOpenFileName in Dev C++, VS

我对编程和编译器还很陌生。我在大学学习了 1 年的 C++ class。上个月我开始了一个项目,我想在其中自动化一些工作流程。该程序采用 phone 目录,然后从中创建 .cfg 文件。没什么高级的,主要是读取、存储和写入数据。

我使用 Dev C++ 创建了我的项目IDE。它工作正常,而且对于像我这样的初学者来说使用起来很简单。最近我尝试使用一个名为 GetOpenFileName 的 Visual C++ 函数。我从互联网上得到了一个例子,但它没有在 Dev C++ 中编译....这是例子:

#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] = '[=10=]';
    ofn.nMaxFile = sizeof( szFile );
    ofn.lpstrFilter = "All[=10=]*.*[=10=]Text[=10=]*.TXT[=10=]";
    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;
}

我知道这是 VC++,我正在用 C++ 编码,我的问题是:是否可以让它在 Dev C++ 中工作以及如何工作?

我收到以下错误:

C:\Users\Gabriel\Documents\Programs\Test\main.o main.cpp:(.text+0xb4): undefined reference to `__imp_GetOpenFileNameA'

我尝试安装另一个 IDE(带有 C++ 软件包的 Microsoft Visual Studio 2015)。在 VS 中,我的代码根本无法编译(但在 Dev C++ 中编译得很好)。我收到一大堆错误:

2015\projects\consoleapplication1\consoleapplication1\consol‌​eapplication1.cpp(23‌​): error C2440: '=': cannot convert from 'char [100]' to 'LPWSTR' 1> c:\users\gabriel\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\consol‌​eapplication1.cpp(23‌​): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

有些事情我不明白...为什么我的代码不能在 VS 中编译,但可以在 Dev C++ 中编译?听说VS编译器是"out of date"。有什么方法可以更新吗?

或者有什么方法可以在 Dev C++ 中使用 VC++ 吗?

您尝试调用的函数具有 a documentation page on MSDN,并且在该页面中它告诉您构建要求:

comdlg32.lib 导入库提供 link 用户正在寻找的缺失 __imp_GetOpenFileNameA 符号。将它添加到您的 link 设置中(它是 Windows SDK 的一部分,它将由 Visual Studio 安装,您可能还有来自 Dev C++ 的另一个副本)

我可以告诉你在哪里可以找到 Visual C++ 中的 link 设置,但虽然我知道 Dev C++ 也有它们,但我自己不使用它,也不知道在哪里。

如果 Dev C++ 的编译器(基于 gcc,对吗?)不知道如何处理导入库,请将 DLL 的名称 (comdlg32.dll) 传递给它的 linker .