0

これが私のコードです。

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

MSDNからの説明:In 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 です。どんな助けも大歓迎です。

4

1 に答える 1

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);
于 2013-07-19T08:30:19.270 に答える