2015-07-13 67 views
1

我得到以下錯誤的參數不兼容:智能感知:類型「爲const char *」的說法是,類型爲「LPCWSTR」

類型「爲const char *」的說法是有類型的參數不兼容「LPCWSTR 「

這裏是我的代碼:

static char* getFmuPath(const char* fileName){ 
char pathName[MAX_PATH]; 
int n = GetFullPathName(fileName, MAX_PATH, pathName, NULL); 
return n ? strdup(pathName) : NULL; 
} 

我宣佈MAX_PATH,但它仍然顯示在路徑

錯誤
#define MAX_PATH 4096 

什麼問題?

+1

你基本上有兩個選擇。 1.避免使用'TCHAR *','LPTSTR','LPCTSTR'和朋友,或以任何形式引用它們的任何API。如果你看到任何這樣的API,請使用它...... W或...明確指出一個對象(在這種情況下爲'GetFullPathNameA')。 2.避免'char *'和'wchar_t *',使用'TCHAR *'。當您需要將'TCHAR *'與'char *'和'wchar_t *'接口時,使用顯式轉換。選項2不太推薦。 –

+0

我已經完成從** char **改爲** TCHAR **現在錯誤消失了,但現在在** strdup(路徑名)**它顯示相同的錯誤 – PrajwalBhat

+0

您的程序將受益於C或C++之間的選擇。將這兩種語言混合在一起往往會產生一種程序,它受到兩種語言中最糟糕的困擾,並且也沒有得到任何好處。 – MSalters

回答

5

GetFullPathName不需要char *。看看文檔,它需要LPTSTRLPCTSTR

根據您的構建設置,LPTSTR和相關類型將變爲char*(ANSI構建)或wchar_t*(Unicode構建)。您正在構建爲Unicode。我也不知道你爲什麼定義MAX_PATH。這是一個Windows常量,所以你不應該重新定義它。

+0

需要什麼變化..?在這種情況下。你能告訴我嗎。 – PrajwalBhat

+0

將您的類型更改爲該功能所需的類型。您正在使用'GetFullPathName'無法使用的類型。這甚至是錯誤消息所說的。 – tenfour

+0

爲** MAX_PATH **被標記爲正常,但仍然無法確定如何解決 – PrajwalBhat

0

使用mbstowcs轉換

#include <stdlib.h> 

size_t mbstowcs(wchar_t * restrict pwcs, const char * restrict s, size_t n); 

您可以在字符串,但不是變量使用L""_T("")

這是你可以直接使用(從this後得到)

wchar_t * convertToLPCWSTR(const char * charArray) { 
    wchar_t * wString = new wchar_t[4096]; 
    MultiByteToWideChar(CP_ACP, 0, charArray, -1, wString, 4096); 
    return wString; 
} 
+2

'_T(變量)'不起作用。 – tenfour

+0

在_T中顯示錯誤 – PrajwalBhat

+1

@PrajwalBhat因爲它只能使用文字(用雙引號括起的字符串)。這個答案是錯誤的。 – szczurcio

0

我@tenfour, 同意如果你仍然想和ANSI字符這樣的char *將努力執行你的系統工作,更改您的代碼以直接調用GetFullPathNameA
或者,更好的方法是在Project-> Properties-> Configuration Properties-> General-> Character Set下使用unicode字符集。

+0

是的,謝謝你 – PrajwalBhat

相關問題