
windowsアプリケーションでprintfを使用したいのですがうまくできません。
AllocConsole関数を使えば、良いと聞いたのですが動きません。使い方が間違っているのでしょうか?
AllocConsole();
freopen("file", "w", stdout); //標準出力をコンソールにする
freopen("file", "r", stdin); //標準入力をコンソールにする
printf("いいえ");
error C3861: 'AllocConsole': 識別子が見つかりませんでした
とエラーが出ます。
どなたかご教授お願いします。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
ついでにprintfを使った場合はこんな感じ。
// #pragma onceの下
#if !defined(WINVER)
#define WINVER 0x0500
#endif
#if !defined(_WIN32_WINNT)
#define _WIN32_WINNT WINVER
#endif
#include "windows.h"
#include "wincon.h"
#pragma comment(lib, "user32.lib")
#pragma comment(lib, "kernel32.lib")
#include <cstdio>
#pragma warning(disable : 4996)
// form load
if (::GetConsoleWindow() == NULL)
{
::AllocConsole();
freopen("CONOUT$", "w", stdout);
freopen("CONIN$", "r", stdin);
HWND hWnd = ::GetConsoleWindow();
if (hWnd != NULL)
{
HMENU hMenu = ::GetSystemMenu(hWnd, 0);
::RemoveMenu(hMenu, SC_CLOSE, MF_BYCOMMAND);
}
}
// form closed
if (::GetConsoleWindow() != NULL) {
::FreeConsole();
}
// button click
// DateTime::Now.ToString()からchar型配列にするのはメンドイから
// GetLocalTimeで代用
SYSTEMTIME st;
::GetLocalTime(&st);
printf("%04hd/%02hd%/%02hd %02hd:%02hd:%02hd\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
No.4
- 回答日時:
訂正
> Boolean RemoveMenu(IntPtr hMenu, UInt32 uPosition, UInt32 uFlags);
UInt32 RemoveMenu(IntPtr hMenu, UInt32 uPosition, UInt32 uFlags);
windows.h等をインクルードする場合は
// #pragma onceの直下に記述
#if !defined(WINVER)
#define WINVER 0x0500
#endif
#if !defined(_WIN32_WINNT)
#define _WIN32_WINNT WINVER
#endif
#include "windows.h"
#include "wincon.h"
#pragma comment(lib, "user32.lib")
#pragma comment(lib, "kernel32.lib")
として
// Form1_Load
if (::GetConsoleWindow() == NULL)
{
::AllocConsole();
StreamWriter^ StdOut = gcnew StreamWriter(Console::OpenStandardOutput(), Encoding::Default);
StdOut->AutoFlush = true;
Console::SetOut(StdOut);
HWND hWnd = ::GetConsoleWindow();
if (hWnd != NULL)
{
HMENU hMenu = ::GetSystemMenu(hWnd, 0);
::RemoveMenu(hMenu, SC_CLOSE, MF_BYCOMMAND);
}
}
// Form1_FormClosed
if (::GetConsoleWindow() != NULL)
{
Console::SetOut(StreamWriter::Null);
::FreeConsole();
}
No.3
- 回答日時:
printfではなくConsole::Write(Console::WriteLine)では駄目でしょうか?
機能的にさほど大差ないと思います。
(String^をそのまま渡せるのがでかいと思う。)
Console::Writeを使うのであれば、DllImportを使ってこんな感じでしょうか。
参考:http://www42.atwiki.jp/jfactory/pages/49.html
http://www.atmarkit.co.jp/fdotnet/dotnettips/142 …
// Visual Studio 2005 CLR Windowsフォームアプリケーション
// フォームを開いたときにコンソール画面を作成し、
// フォームを閉じたときに破棄する。
// ボタンを押すと、コンソール画面に現在時刻を表示する。
// ※インデント保持のため全角スペースを使用。
// コピペ時に全角空白を置換しないとエラーが出ます。
// Form1.h の #pragma once のすぐ下に記述
namespace Win32
{
using namespace System;
using namespace System::Runtime::InteropServices;
[DllImport("kernel32.dll")]
UInt32 AllocConsole();
[DllImport("kernel32.dll")]
UInt32 FreeConsole();
[DllImport("kernel32.dll")]
IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
IntPtr GetSystemMenu(IntPtr hWnd, UInt32 bRevert);
[DllImport("user32.dll")]
Boolean RemoveMenu(IntPtr hMenu, UInt32 uPosition, UInt32 uFlags);
const UInt32 SC_CLOSE = 0x0000F060;
const UInt32 MF_BYCOMMAND = 0x00000000;
};
// namespace プロジェクト名 { の下の
// using namespace の羅列の下に追加
using namespace System::IO;
using namespace System::Text;
// デザイン画面よりForm1のイベントのLoadを追加し、
// 下記コードを記述
if (Win32::GetConsoleWindow() == IntPtr::Zero)
{
Win32::AllocConsole();
StreamWriter^ StdOut = gcnew StreamWriter(Console::OpenStandardOutput(), Encoding::Default);
StdOut->AutoFlush = true;
Console::SetOut(StdOut);
IntPtr hWnd = Win32::GetConsoleWindow();
if (hWnd != IntPtr::Zero)
{
IntPtr hMenu = Win32::GetSystemMenu(hWnd, 0);
Win32::RemoveMenu(hMenu, Win32::SC_CLOSE, Win32::MF_BYCOMMAND);
}
}
// デザイン画面よりForm1のイベントのForm_Closedを追加し、
// 下記コードを記述
if (Win32::GetConsoleWindow() != IntPtr::Zero)
{
Console::SetOut(StreamWriter::Null);
Win32::FreeConsole();
}
// デザイン画面よりButton1を追加し、クリックイベントを追加し、
// 下記コードを記述
Console::WriteLine(L"{0}", DateTime::Now);
DllImportを使わず、windows.h等を#includeして使う場合
http://social.msdn.microsoft.com/Forums/ja-JP/vc …
を参考にしてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
python エラー
-
エラー 'iostream.h' : No su...
-
エクセルのエラーメッセージ「4...
-
Excelのエラーで困ってます。
-
粒子法プログラムのビルドエラ...
-
VC6からVS2005への移行エラーに...
-
ビルド時にinet_ptonが見つから...
-
「マクロが再定義されました」...
-
ウィンドウのハンドルからファ...
-
ビルドが失敗してしまいます
-
Excel VBAのコンボボックスに...
-
visual C++ でaruduinoとシリア...
-
C# 固定長ファイルの取得 FileGet
-
十進BASICのグラフィック...
-
VC++6.0シンタックスエラーにつ...
-
キーの自動入力
-
適切な変換関数が存在しない???
-
署名と検証
-
hello worldの表示の仕方
-
<unistd.h>をVisualStudioでつ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
Excelのエラーで困ってます。
-
ビルド失敗 指定されたファイ...
-
fortranでプログラムを実行する...
-
visual C++ でビルドの中止がで...
-
適切な変換関数が存在しない???
-
VB2008で定数に色の設定をした...
-
HEWを使用しているのですが、こ...
-
コンパイルできません。
-
バッチからsqlplusの接続エラー...
-
Visual Studioのstrcpy_sについて
-
DLL関数を使ったプログラム
-
キーの自動入力
-
RightとLeft関数のライブ...
-
BC30002: 型 'ListItem' が定義...
-
LPCWSTRとchar
-
error C3867 関数呼び出しには...
-
デバッグ中のエラーのことで教...
-
sys/time.hのインクルードがで...
おすすめ情報