在 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\consoleapplication1.cpp(23):
error C2440: '=': cannot convert from 'char [100]' to 'LPWSTR' 1>
c:\users\gabriel\documents\visual studio
2015\projects\consoleapplication1\consoleapplication1\consoleapplication1.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 .
我对编程和编译器还很陌生。我在大学学习了 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\consoleapplication1.cpp(23): error C2440: '=': cannot convert from 'char [100]' to 'LPWSTR' 1> c:\users\gabriel\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\consoleapplication1.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 .