我是编程和编译器的新手。我在大学里有一年的C ++课程。上个月,我开始了一个项目,我希望自动化一些工作流程。该程序采用电话目录,然后从中创建.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] = '\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;
}
我理解这是VC ++而我用C ++编写代码,我的问题是:是否可以使它在Dev C ++中运行以及如何使用?
我收到以下错误:
C:\ Users \ Gabriel \ Documents \ Programs \ Test \ main.o main.cpp :(。text + 0xb4): 未定义的引用`__imp_GetOpenFileNameA&#39;
我尝试安装另一个IDE(带有C ++包的Microsoft Visual Studio 2015)。在VS中,我的代码完全没有编译(但它在Dev C ++中编译得很好)。我收到了很多错误:
2015 \项目\ consoleapplication1 \ consoleapplication1 \ CONSOL eapplication1.cpp(23): 错误C2440:&#39; =&#39;:无法转换为&#39; char [100]&#39;到了LPWSTR&#39; 1 GT; c:\ users \ gabriel \ documents \ visual studio 2015年\项目\ consoleapplication1 \ consoleapplication1 \ CONSOL eapplication1.cpp(23): 注意:指向的类型是不相关的;转换需要 reinterpret_cast,C风格的演员表或函数式演员
有些东西我不明白......为什么我的代码不能在VS中编译,但它在Dev C ++中编译?我听说VS编译器已经过时了#34;有什么方法可以更新吗?
或者有没有办法在Dev C ++中使用VC ++?
答案 0 :(得分:0)
您尝试调用的函数有a documentation page on MSDN,在该页面中它会告诉您构建要求:
comdlg32.lib
导入库提供了链接器正在查找的缺少的__imp_GetOpenFileNameA
符号。将其添加到您的链接设置(它是Windows SDK的一部分,它将由Visual Studio安装,您可能有另一个来自Dev C ++的副本)
我可以告诉你在Visual C ++中哪里可以找到链接设置,但是虽然我知道Dev C ++也有它们,但我自己并不使用它,也不知道在哪里。
如果Dev C ++的编译器(基于gcc,对吗?)不知道如何处理导入库,请将其链接器的名称(comdlg32.dll
)传递给其链接器。