当我尝试编译下面的代码:
#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; }
函数FindFirstVolume
是未声明的,这使得编译器假定它返回int
,实际上它应该返回HANDLE
。 你得到的警告特指你试图隐式地把int
返回值转换成HANDLE
类型( HANDLE
实际上是一个指针类型)。
Windows API头文件中的FindFirstVolume
的声明很可能被一些条件编译指令隐藏起来。 您可能必须#define _WIN32_WINNT 0x0500
来“启用”该函数的声明。
加
#define _WIN32_WINNT 0x0500
之前包括Windows API标头,看看是否有帮助。 如果这确实是罪魁祸首,请在您的项目设置0x0500
全局0x0500
设置为0x0500
。 实际上,对于所有使用MS头文件的现代Windows项目,您应该始终无条件地执行此操作。
你试过了吗
hSearch = FindFirstVolume((LPWSTR)sz_VolumeName , BUFSIZE);
HANDLE是一个相当奇怪的数据类型。 它类似于一个指针。 你得到这个错误的原因是FindFirstVolume()函数似乎返回一个整数。 这就是为什么你的错误提到一个整数。 您正在将(指定类型的)hsearch指针指定给一个整数,该整数指示它指向内存中的一个不同的点,而不是实际分配该整数值。 如果你想hsearch指向FindFirstVolume的整数,那么你需要这样做:
*hSearch = FindFirstVolume(sz_VolumeName , BUFSIZE) ;//13
如果你想访问这个整数,你可以这样做:
int myInt = *hSearch
因为我不确定你在代码中想要完成什么,我希望这有助于。