タグ

C++とWindowsに関するbabydaemonsのブックマーク (13)

  • Windowsアプリのメモリ使用量を取得する【Unity】 - Cooooding!!

    概要 UnityではないC#であればSystem.Environment.WorkingSetやProcess.GetCurrentProcess().WorkingSet64などを使ってアプリのメモリ使用量を取得できますが、Unityで作ったWindows Standaloneアプリでは何故か0を返します。調べても解決方法が見つかりませんでしたがC++でPluginを書いてみたら取得できたのでその方法を解説します。 メモリ関連の用語について まず実装の説明をする前にメモリ関連の用語について簡単に説明しておきます。 用語 意味 スワップ 物理的なメモリ上のデータをストレージ(HDDやSSD)上に退避させること ワーキングセット 物理的なメモリ上に確保されているメモリ量 プライベート ワーキングセット ワーキングセットのうちそのプロセスだけが使えるメモリ量 共有 ワーキングセット ワーキング

    Windowsアプリのメモリ使用量を取得する【Unity】 - Cooooding!!
    babydaemons
    babydaemons 2021/07/05
    PrivateUsage = コミットサイズ プライベートワーキングセット + スワップしたメモリ量
  • WM_WINDOWPOSCHANGED message (Winuser.h) - Win32 apps

    babydaemons
    babydaemons 2020/01/16
    SetWindowPos関数は単なる関数呼び出しじゃなくてウィンドウメッセージを生成するのに要注意か。“Sent to a window whose size, position, or place in the Z order has changed as a result of a call to the SetWindowPos function”
  • 名前付きパイプによるプロセス間通信をやってみる - Ayumu's I/O

    Windowsにおいてプロセス間通信(IPC)に使われる名前付きパイプについて調べました。 名前付きパイプ(Named Pipe)とは CreateNamedPipe関数 パイプに関連する他の関数 名前付きパイプのアクティビティの確認方法 プログラム サーバ側のソースコード クライアント側のソースコード 実行結果 名前付きパイプ(Named Pipe)とは 名前付きパイプとは、プロセス間のデータ転送のためのプログラミングAPI。メールスロットと異なり、信頼される双方向通信を実現できる。ファイルのようにアクセスでき、Windows I/Oの標準関数であるCreateFile関数、ReadFile関数、WriteFile関数、CloseHandle関数を使って扱うことができる。生成時に作成するインスタンスの個数を指定できるため、1つのサーバが複数のクライアントと通信することもできる。また、サー

    名前付きパイプによるプロセス間通信をやってみる - Ayumu's I/O
  • IcmpSendEcho function (icmpapi.h) - Win32 apps

    babydaemons
    babydaemons 2017/07/12
    コーディングミスだった。orz → いや、11010のエラーコードを文章にしてくれないんだが。“Other: Use FormatMessage to obtain the message string for the returned error.”
  • C/C++のロケールって、こういうことだったのか: 晶紀の館 第2別館

    C++の標準ライブラリにはUnicodeを扱うためのクラスが用意されています。 文字列を表す wstring や、ファイル入出力の wifstream や wofstream など。 さて、 Unicodeで書かれたテキストファイルを読もうとこんなコードを書きました。 std::wstring str; std::wifstream in(L"test.txt"); std::getline(in, str); うまく読めませんでした。 ロケールの問題だろうかと、次の1文を追加してみたのですが、それでもうまくいきません。 std::locale::global(std::locale("japanese")); とりあえず、読む方は後回しにして、書く方を先に片付けましょう。 std::wofstream out(L"test.txt"); out << L"あいうえお"; ………。 何も出

    C/C++のロケールって、こういうことだったのか: 晶紀の館 第2別館
  • C言語/C++ 処理時間計測 入門

    概要 プログラム開発当初から過度のパフォーマンス最適化を行うのは良くないと言われている。 プログラムソースの柔軟性が失われる可能性があるし、必要無いかもしれない最適化に時間を費やすのは開発工数管理的に好ましくないからだ。 プログラムがある程度動作するようになり、パフォーマンスが悪い(実行速度が遅すぎる)場合は、 処理時間計測を行い処理時間を要している箇所を探しだし、アルゴリズムやデータ構造の変更などのパフォーマンス・チューニングを行う必要がある。 予備調査として、色々なアルゴリズム・データ構造を採用した場合の処理時間計測を行い、 どれが最適か、どのような性質があるかを知ることも重要である。 稿では、上記のような目的のためにプログラムの処理時間を計測する方法について説明する。 場合によっては、ストップウォッチを片手にプログラムを実行し、処理時間を計測することもあるかもしれないが、 精度が1

    babydaemons
    babydaemons 2016/09/08
    std::chronoが使える環境がうらやましい。。。orz
  • 开门红-满江红!

    babydaemons
    babydaemons 2014/10/07
    やはり、OutputDebugString()は超絶コストが掛ることが判った。【機械翻訳笑うw】
  • Warning: CFile::GetStatus() returns m_attribute without high-order flags - はらぐろブログラマン

    babydaemons
    babydaemons 2014/10/07
    あー、はてな村民さまさまだw
  • 技術レポート「Windowsネイティブプログラムのエラー解析」|ソフテックだより|株式会社ソフテック

    「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。 さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。 ソフテックだより(発行日順)のページへ ソフテックだより 技術レポート(技術分野別)のページへ ソフテックだより 現場の声(シーン別)のページへ Windowsプログラム(C/C++)の厄介な問題のひとつに、アプリケーションエラーがあります。 最近では.NET Framework上で動作するマネージドプログラム(※1)のプログラムが増えてきているため、アプリケーションエラーが発生する可能性は低いと思いますが、まだまだ現役のネイティブプログラム(※2)は多いため、避けては通れない問題です。 そんな中、先日、私にアプリケーションエラーの調査依頼があり、担当することになりました。しかし、数年振り

    babydaemons
    babydaemons 2014/04/24
    User.dmpの方法は初めて知った
  • 2012-05-06

    Win32 APIにはファイルの変更を監視する方法として、少なくとも2つの方法がある。 私は従来よりファイル監視のためのAPIとして、FindFirstChangeNotification関数を愛用している。 だが、WindowsNT系のUNICODEビルドであれば使えるというReadDirectoryChangeW関数によるファイル監視を使うことにより、パフォーマンスの改善が望めそうに思えたため、これを用いた場合には、どのような実装方法となるのか確かめたく実験してみることとした。 FindFirstChangeNotification APIを使ってファイルを監視する方法 Win32でファイルの変更通知を行うものとしては、Windows95時代から使える方法として、FindFirstChangeNotification関数があげられる。 このAPIは、指定したディレクトリまたは、その配下

    2012-05-06
  • ダイナミック リンク ライブラリ(DLL)の基礎知識

    1. DLLの作り方(VC++編) 関数subをDLLにしたい場合,次のようにソースプログラムを作成する. 外部プログラムから呼び出したい関数(この場合sub)の前に __declspec(dllexport)という おまじないをつけておく(このおまじないがついていない関数はDLL外部からは見えないので安心). #include <stdio.h> __declspec(dllexport) int sub(int arg) { printf("sub %d\n", arg); return arg + 1; } sub.c 通常の静的にリンクして利用する関数を作る場合(*.objまたは静的リンク ライブラリ*.libを作ってリンクする場合)との違いは, DLLの外に公開したい関数の定義の前に__declspec(dllexport)というキーワードがつけることだけになっている. [さらに

    babydaemons
    babydaemons 2010/12/06
    なんでVisual Studioはこんなに出来ない子なんだ。orz
  • C++/CLIなら面倒は無い? - NyaRuRuが地球にいたころ

    引用元はこの辺かな. また,システムグローバルなキー入力の監視方法には主に3通りあります. (フィルタ)ドライバの作成 キーボードフックの使用 低水準キーボードフックの使用 有名な『窓使いの憂』は1を,かおくさんから紹介があった『Xkeymacs』は2を使用しています. 1 は最も強力ですが最も手間がかかります.2は特定アプリケーションのみを監視するのには便利ですが,フックハンドラは DLL に実装しなければならないため .NET での実装上問題があります.また,2ではAlt+Tab などの一部のキーストロークはフックできません.3は使用可能環境に Windows NT 4.0 SP3 以降という制限がありますが,キーボードドライバや SendInput API によって入力された直後をフックすることが出来ます.また3はフックハンドラを DLL に置く必要がないという特徴があり,.NET

    C++/CLIなら面倒は無い? - NyaRuRuが地球にいたころ
  • EXEファイルの内部構造(PEヘッダ)

    はじめに 皆さんは、アプリケーションを起動させるEXEファイルの中身について考えてみたことはありますか? 稿では、EXEファイルの内部構造について解説していきます。特にEXEファイルに関する日語の資料が少ないのが現状です。そのため、解析に手を出してみたいと思っても挫折してしまった方も少なくないのではないでしょうか。稿は、筆者自身の経験を踏まえ、実際にEXEファイルの解析ができるようになるための資料となるよう解説していきます。 前回、第1回では、EXEファイルの概要として、MZシグネチャ、マシンタイプ、ネイティブコード、リソース、デバッグ情報などについて説明しました。これらの一部はPEヘッダと呼ばれる場所に格納されています。また、そのPEヘッダより前にあるEXEファイルの先頭には、IMAGE_DOS_HEADER構造体、MS-DOS用スタブなどがあり、それらがWindowsの元となった

    EXEファイルの内部構造(PEヘッダ)
  • 1