如何将错误的强制转换HINSTANCE删除为int?

时间:2012-07-19 18:05:29

标签: c winapi gcc casting

我正在使用-Wbad-function-cast标志在gcc上编译程序。 gcc显示以下警告:

cast does not match function type

这是警告线:int ret = (int) FindExecutable(file, NULL, result)

问题是:它可以删除吗?可能会转换为另一种Windows数据类型,但我将其作为整数处理。

2 个答案:

答案 0 :(得分:2)

你看过HINSTANCE究竟是什么吗? (我猜测它的指针,而不是int)。所以你可能会有更好的运气投射到空白*

http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx

实例的句柄。这是内存中模块的基址。 HMODULE和HINSTANCE今天是一样的,但在16位Windows中代表了不同的东西。 此类型在WinDef.h中声明如下: typedef HANDLE HINSTANCE;

HANDLE
对象的句柄。 此类型在WinNT.h中声明如下: typedef PVOID HANDLE;

指向任何类型的指针。 此类型在WinNT.h中声明如下: typedef void * PVOID;

答案 1 :(得分:0)

根据FindExecutable documentaction,该函数返回一个HINSTANCE类型的值,但也返回值小于或等于32的整数以指示错误。在64位Windows系统上将结果转换为int会触发编译器警告。为了避免这种情况并仍然检查错误值,可以将其值强制转换为unsigned long long