1

ランダムな出力に書き込みたいのですが、その中にSTD_OUTPUT_FILEはあります。を使いたい のですWriteFileが、何も書いてないようです。

HANDLE outH = GetStdHandle ( STD_OUTPUT_HANDLE );
WriteFile( outH,param, strlen ( param ), &written_b, NULL );
4

3 に答える 3

0

呼び出しウィンドウ/コンソールを使用して STDOUT に書き込むには、結果の実行可能ファイルをコンソール サブシステムにリンクする必要があります。

LINK.exe /EDIT /SUBSYSTEM:CONSOLE {ここにあなたのexe名}

これは古い VB6 環境で動作します。同じ実行可能フラグが Visual C にも適用されると想定しています。

于 2014-02-27T22:35:08.177 に答える
0

私はそれを解決しました。

標準出力のリダイレクトでエラーが発生し、そのままにしておくべきときに何か問題が発生していました。まだ知りません。答えを更新します。

于 2013-03-20T22:38:11.207 に答える
0

あなたのコードには、いかなる形式のエラー チェックもありません。これは、Web サイトまたはスタック オーバーフローの回答からコピーされたコードによく見られます。ここでは、わかりやすく簡潔にするためにエラー チェックが省略されることがよくあります。しかし、自分でコードを書くときはいつでも、失敗する可能性があることを絶対に想定し、その場合に対処するコードを書く必要があります。ここで、エラーが発生していることがわかりますが、まだエラー チェック コードを追加して、エラーが発生している場所を確認していません。

必要に応じて SDK ドキュメントを参照して、呼び出す API 関数がエラー状態をどのように処理するかを確認しながら、エラー チェック コードを追加しましょう。

static void ReportError(const TCHAR* errorMsg)
{
   MessageBox(NULL, errorMsg, NULL, MB_OK | MB_ICONERROR);
}

int _tmain(int argc, TCHAR* argv[])
{
   char param[] = "This is some output.";
   DWORD written_b;

   HANDLE outH = GetStdHandle(STD_OUTPUT_HANDLE);
   if (!outH)
   {
      ReportError(TEXT("No standard handles associated with this app."));
   }
   else if (outH == INVALID_HANDLE_VALUE)
   {
      TCHAR errMsg[100];
      wsprintf(errMsg, TEXT("GetStdHandle() failed with error code %lu"), GetLastError());
      ReportError(errMsg);
   }
   else
   {
      if (!WriteFile(outH, param, strlen(param), &written_b, NULL))
      {
         TCHAR errMsg[100];
         wsprintf(errMsg, TEXT("WriteFile() failed with error code %lu"), GetLastError());
         ReportError(errMsg);
      }
   }

   return 0;
}

これで、何か問題が発生した場合、それを知るだけでなく、その理由もわかります。

良いことに、このコードを自分のコンピューターで実行すると、問題なく動作します。したがって、問題はアプリケーションの別の場所、まだ確認していないコードの一部にあります。エラー処理コードは、それを洗い流すのに役立ちます。

于 2013-03-20T22:38:20.273 に答える