2013-07-19 67 views
0

這是我的代碼。GetPrivateProfileString無法獲取錯誤代碼

char BPP[5]; 
int result, err; 

result = GetPrivateProfileStringA("abc", "cba", NULL, BPP, 5, "D:\\aefeaf.ini"); // result = 0 
result = _get_errno(&err); // result = 0, err = 0 
result = GetLastError(); // result = 0 

和說明從MSDNIn the event the initialization file specified by lpFileName is not found, or contains invalid values, this function will set errorno with a value of '0x2' (File Not Found). To retrieve extended error information, call GetLastError.

最後一個參數是隨機的,該文件不存在。但GetLastError()仍然返回0.有人可以向我解釋爲什麼它不返回2?

編輯:由於@JochenKalmbach建議,我確保我的項目不使用C++/CLI。 @claptrap說,errorno是一個錯字(它應該是errno),我在上面的代碼中添加了_get_errno。但仍然,所有的錯誤代碼返回是0.任何幫助,非常感謝。

+0

確實errorno被置爲2? errorno!= getlasterror –

+0

@claptrap那麼你在哪裏建議我查找errorno? – DzungAh

+0

什麼是「GetPrivateProfileStringA」的返回值? –

回答

0

希望你沒有使用C++/CLI ...這會弄亂「GetLastError」的值,因爲代碼在內部使用「IJW」(它只是工作)並且執行一堆Win32操作。......

對於本地應用程序,此按預期工作:

#include <stdio.h> 
#include <tchar.h> 
#include <Windows.h> 
#include <crtdbg.h> 

int _tmain(int argv, char *argc[]) 
{ 
    char szStr[5]; 
    int result = GetPrivateProfileStringA("abc", "cba", NULL, szStr, 5, "D:\\aefeaf.ini"); 
    _ASSERTE(result == 0); 
    result = GetLastError(); 
    _ASSERTE(result == 2); 
} 

如果您正在使用C++/CLI,那麼你應該圍繞着法

#pragma managed(push, off) 
// Place the method here 
#pragma managed(pop); 
+0

不幸的是,我沒有使用C++/CLI。該程序是簡單的基於對話框的MFC。 – DzungAh

+0

@DzungAh:對我來說,它沒有任何問題......你執行了簡單的例子嗎? –

+0

我確實創建了一個空項目來測試該方法,結果仍然相同。我正在使用VS2008。 – DzungAh