赋值从整数中生成没有强制转换的指针

use*_*323 1 c windows winapi

当我尝试编译以下代码时:

#define BUFSIZE MAX_PATH 


//....


TCHAR sz_VolumeName[BUFSIZE] ;//11
HANDLE hSearch ;//12
hSearch  = FindFirstVolume(sz_VolumeName , BUFSIZE) ;//13
Run Code Online (Sandbox Code Playgroud)

它给了我错误:

[Warning] assignment makes pointer from integer without a cast 
Run Code Online (Sandbox Code Playgroud)

- 第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;
       }
Run Code Online (Sandbox Code Playgroud)

AnT*_*AnT 5

函数FindFirstVolume是未声明的,这使得编译器假定它返回int,而实际上它应该返回HANDLE.您收到的警告特指您尝试将int返回值隐式转换为HANDLEtype(HANDLE实际上是指针类型).

很可能FindFirstVolume是某些条件编译指令隐藏了Windows API标头中的声明.您可能必须#define _WIN32_WINNT 0x0500"启用"该功能的声明.

加

#define _WIN32_WINNT 0x0500
Run Code Online (Sandbox Code Playgroud)

在包含Windows API标头之前,看看它是否有帮助.如果这确实是罪魁祸首,请在项目设置中设置_WIN32_WINNT为0x0500全局.对于使用MS头文件的所有现代Windows项目,这实际上是您应该无条件执行的操作.