当我尝试编译以下代码时:
#define BUFSIZE MAX_PATH
//....
TCHAR sz_VolumeName[BUFSIZE] ;//11
HANDLE hSearch ;//12
hSearch = FindFirstVolume(sz_VolumeName , BUFSIZE) ;//13
它给了我错误:
[Warning] assignment makes pointer from integer without a cast
- 第13行的问题
这里出了什么问题?
编辑:例如:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <tchar.h>
#define BUFSIZE MAX_PATH
int main(int argc, char *argv[])
{
TCHAR sz_VolumeName[BUFSIZE] ;
HANDLE hSearch ;
hSearch = FindFirstVolume(sz_VolumeName , BUFSIZE) ;
printf("First Volume Name : %s \n" , sz_VolumeName) ;
FindVolumeClose(hSearch) ;
getchar() ;
system("PAUSE");
return 0;
}
答案 0 :(得分:5)
函数FindFirstVolume
未声明,这使得编译器假定它返回int
,而实际上它应该返回HANDLE
。您收到的警告特指您尝试将int
返回值隐式转换为HANDLE
类型(HANDLE
实际上是指针类型)。
很可能某些条件编译指令隐藏了Windows API标头中FindFirstVolume
的声明。你可能需要#define _WIN32_WINNT 0x0500
来“启用”该函数的声明。
添加
#define _WIN32_WINNT 0x0500
包含Windows API标头之前,看看它是否有帮助。如果这确实是罪魁祸首,请在项目设置中全局设置_WIN32_WINNT
为0x0500
。对于使用MS头文件的所有现代Windows项目,这实际上应该是无条件的。
答案 1 :(得分:0)
你试过吗
hSearch = FindFirstVolume((LPWSTR)sz_VolumeName , BUFSIZE);
答案 2 :(得分:-1)
HANDLE是一种相当奇怪的数据类型。它类似于指针。你得到那个错误的原因是FindFirstVolume()函数似乎返回一个整数。这就是你的错误提到一个整数的原因。您将(种类)指针hsearch分配给一个整数,该整数告诉它指向内存中的不同点,而不是实际为其分配该整数值。如果您希望hsearch指向FindFirstVolume中出现的整数,那么您需要这样做:
*hSearch = FindFirstVolume(sz_VolumeName , BUFSIZE) ;//13
如果您想访问该整数,您可以这样做:
int myInt = *hSearch
因为我不确定你在代码中想要完成什么,所以我希望这会有所帮助。