1

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

#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;
       }
4

3 回答 3

5

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

Windows API 标头中的声明很可能FindFirstVolume被某些条件编译指令隐藏。您可能必须#define _WIN32_WINNT 0x0500“启用”该函数的声明。

添加

#define _WIN32_WINNT 0x0500

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

于 2013-07-09T18:39:14.187 回答
0

你试过了吗

hSearch  = FindFirstVolume((LPWSTR)sz_VolumeName , BUFSIZE);
于 2013-07-09T18:19:22.333 回答
-1

HANDLE 是一种相当奇怪的数据类型。它类似于指针。您收到该错误的原因是 FindFirstVolume() 函数似乎返回一个整数。这就是您的错误提到整数的原因。您正在将(某种)指针 hsearch 分配给一个整数,这告诉它指向内存中的不同点,而不是实际分配该整数值给它。如果你想让 hsearch 指向 FindFirstVolume 的整数,那么你需要这样做:

*hSearch  = FindFirstVolume(sz_VolumeName , BUFSIZE) ;//13

如果你想访问那个整数,你可以这样做:

int myInt = *hSearch

因为我不确定您要在代码中完成什么,所以我希望这会有所帮助。

于 2013-07-09T18:55:43.097 回答