2011-10-26 3 views
1

モジュールのバージョン情報をC++コード(基本的にthis)で取得しようとしていますが、コンパイル時にエラーが発生しています。ここでは、コードです:GetModuleFileNameWのキャスティングエラー

WCHAR fileName[MAX_PATH]; 
HMODULE module = GetModuleHandle(L"some-module"); 
DWORD size = GetModuleFileName(module, fileName, MAX_PATH); 

コンパイラは戻っている:

 
    error C2664: 'GetModuleFileNameW' : cannot convert parameter 1 from 'WHANDLE' to 
    'HMODULE' 
    Conversion from 'void*' to pointer to non-'void' requires an explicit cast 

はここで何が起こっていますか? GetModuleHandleHMODULEを返します。文書化された最初のパラメータはGetModuleFileNameです。ここで

何の価値のためのコンパイラのバージョンは次のとおりです。

 
    Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86 
    Copyright (C) Microsoft Corporation. All rights reserved. 

ありがとう!これは、コンパイルし、ここでは正常に動作するので

+0

あなたはそれが右のコードと、右の誤りだと確信していますか? 'GetModuleFileName'呼び出しの' module'は既に 'HMODULE'型です。 – jamesdlin

答えて

4

、ご含まれたり、図書館で起こってファンキーな何かがあるに違いありません:

// Scratch.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 
#include "windows.h" 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    WCHAR fileName[MAX_PATH]; 
    HMODULE module = GetModuleHandle(L"some-module"); 
    DWORD size = GetModuleFileName(module, fileName, MAX_PATH); 
    return 0; 
} 
+0

うん、それは私が心配していたことだ。どのバージョンのコンパイラを使用していますか? –

+0

私はこの実験でVisual Studio 2010 SP1を使用していました。 –

+0

この問題は、Lotus Notes C-APIヘッダー(global.h)... gurrrによって引き起こされたことが判明しました。 –

関連する問題