2011-10-26 103 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 

這到底是怎麼回事? GetModuleHandle返回HMODULE,這是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! –