2013-04-01 16 views
1

我試圖通過傳遞它作爲參數在各種類型的Windows API函數中接受像char *這樣的變量來將一些內容存儲到字符串變量中。如何將字符串轉換爲LPSTR在WinAPI函數中存儲字符串輸出

例如,我的代碼是: -

std::string myString; 
GetCurrentDirectoryA(MAX_PATH, myString); 

現在我該怎樣轉換成字符串變量在這種情況下LPSTR。

請注意,該函數並不是用來傳遞字符串的內容作爲輸入,而是函數在執行後將一些內容存儲到字符串變量中。因此,排除了myString.c_str()。

編輯:我已經消除串的概念,並用東西取代它像

char myString[ MAX_PATH ]; 

的解決方法解決方案,但不是我的目標。我想利用字符串。有沒有辦法?

而且鑄造像

GetCurrentDirectoryA(MAX_PATH, (LPSTR) myString); 

不工作。

在此先感謝您的幫助。

回答

5

通常,人們改寫他們需要std::string友好的Windows功能,就像這樣:

std::string GetCurrentDirectoryA() 
{ 
    char buffer[MAX_PATH]; 
    GetCurrentDirectoryA(MAX_PATH, buffer); 
    return std::string(buffer); 
} 

或本寬字符支持:

std::wstring GetCurrentDirectoryW() 
{ 
    wchar_t buffer[MAX_PATH]; 
    GetCurrentDirectoryW(MAX_PATH, buffer); 
    return std::wstring(buffer); 
} 
0

通常,我會將數據讀入TCHAR,然後將其複製到我的std :: string中。這是最簡單的方法。

3

LPTSTR被定義爲TCHAR*,所以實際上它只是一個普通的C字符串,這取決於你是否用ASCII或Unicode的在你的代碼工作。所以,做

LPTSTR lpStr = new TCHAR[256]; 
ZeroMemory(lpStr, 256); 
//fill the string using i.e. _tcscpy 
const char* cpy = myString.c_str(); 
_tcscpy (lpStr, cpy); 
//use lpStr 

_tcscpythis線程的引用見here

+0

嗨,你的意思.c_str()或者是否有類似.c_star()。我無法搜索它。另外,我正在使用ASCII。所以,根據我編輯的問題,我提供的解決方案解決方案更好,還是建議我使用您提出的解決方案。請你把這兩種方法與我對比。 – user1190882

+0

這是我的平板電腦的自動更正!我的意思是'c_str()'當然!我使用通用的通用方法。爲了保持通用性,我的方法更好。如果你對你的方法很好,那麼就使用它,因爲它提供了一個更簡單但非通用的方法。 –

相關問題