赋值使得整型指针没有强制转换

当我尝试编译下面的代码:

#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 

因为我不确定你在代码中想要完成什么,我希望这有助于。