おとついの晩ご飯

忘れやすいので忘れたくないことを書いています。

【その他】はてなブログ内にソースコードを入れる方法

問題

はてなブログソースコードを入れたいけど、方法がわからない。
雰囲気でシングルクォーテーション3つ「'''」で囲ってみたけどだめ。

解決方法

グレイヴ・アクセント3つ「```」で囲む。

・・・なにそれ?

どうやって入力するかもわからなかったので、それも検索。

入力の仕方は、【Shift】+【@】

シングルクォーテーションと似たような点なのに違うものみたいです。

▼ グレイヴ・アクセント囲った部分は、以下の黒背景の部分のように表示される。

f:id:meme1111aMOMO:20210601143747p:plain
マークダウン ソースコード見た目

【C++】Windowsデスクトップアプリケーション 処理の流れについて

問題

初めてC++Windowsデスクトップアプリケーションを作成したときに、 最初から入ってるソースコード(Visual Studioのテンプレート)でどういった処理が行われているのかわからず 色々と調べることになった。

C#のようにMain関数があるだけでなく、いろんな関数があるので理解できるまではややこしく感じる。

自分なりの理解

wWInMain エントリーポイント

int APIENTRY wWInMain(_In_ HINSTANCE hInstance,
                      _In_opt_ HINSTANCE hPrevInstance,
                      _In_ LPWSTR lpCmdLine,
                      _In_ int nCmndShow)

この関数からプログラムがスタートする。
関数内でアプリケーションの初期化などを行う。
その後、GetMessageが呼ばれる。


GetMessage関数

while (GetMessage(&msg, nullptr, 0, 0))
{
    if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}

Windowsから送られたメッセージを受けて、処理を行う箇所。

例えば、マウスの操作やキーボード操作、アプリを起動してウインドウが作成されたときや、 終了したときなど様々なメッセージがくる。

メッセージがないときは、ループは回らず、メッセージを受けたときのみ処理が行われる。

こちら側でなにも設定せずとも、待ってくれるので逆にどうやって待っているかわからず悩んでいた。


TranslateMessage関数

Whileの中で呼ばれる。
キーボードからメッセージを色々する関数みたい。
自分が色々触ったときは、キーボードどうこうはあまり必要なかったのでスルー。


DispatchMessage関数

Whileの中で呼ばれるもうひとつの関数。
この関数からメッセーををWndProc関数へ送って処理する。


WndProc関数

WndProc関数の中身は以下の様になっている

switch (message)
{
case WM_COMMAND:
    {
    ・・・省略・・・
    }
case WM_PAINT:
    {
    ・・・省略・・・
    }
case WM_DESTROY:
    {
        PostQuitMessage(0);
        break;
    }
default:
    return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;

見てわかるように受けたメッセージの種類ごとに行う処理を分けている。
例えば、WM_DESTROYを受けたときは、PostQuitMessage関数を呼び出して、アプリケーションを終了させる。
こういった感じに、WM_CREATEでアプリ開始時にウインドウが作成されるタイミングではこの処理を行う、WM_CLOSEでアプリのウィンドウが閉じられる(終了)ときにこの処理を行うといったことが可能。


一旦ここまで、おおまかな流れは理解したつもり。。。


【C++】未解決の外部シンボルが***で参照されました

問題

ソースコードを参考サイトからコピーしてきたときなどに、
『未解決の外部シンボルが***で参照されました』とエラーが表示される。

原因

  • libファイルがリンクされていない。

解決方法

libファイル内にある関数だから、〇〇○関数呼び出そうとしているけど、そんな関数ないですよという状態。

プロジェクトを右クリック > プロパティ > リンカー > 入力 にある『追加の依存ファイル』にlibファイルを追加する。

または、cppファイルに以下を追加することでも可能。

pragma comment(lib, "libのパス")