😽

wWinMain()を静的ライブラリに含めたい

2025/04/13に公開

WinMain()ならコンパイルが通るのに、wWinMain()だとコンパイルが通らない。

wWinMain()を記述したソースファイルをtarget_source()PUBLICにするとコンパイルが通り、実行も問題なくできる。
さらに、そのソースファイルで参照しているヘッダーとモジュールインターフェースもPUBLICにする

CMakeLists.txt
find_package(Vulkan REQUIRED)
add_library(${PROJECT_NAME} STATIC)
target_sources(${PROJECT_NAME} PUBLIC main.cpp)
target_sources(
  ${PROJECT_NAME}
  PUBLIC FILE_SET
         CXX_MODULES
         FILES
         Win32Application.ixx)
target_sources(${PROJECT_NAME} PRIVATE Win32Application.cppm)
target_compile_definitions(${PROJECT_NAME} PRIVATE _UNICODE UNICODE)
main.cpp
#include <Windows.h>
#include <tchar.h>
import Win32Application;

_Use_decl_annotations_
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR lpCmdLine, int nCmdShow)
{
    return luna::Win32Application::Run(hInstance, nCmdShow);
}

※ぼやき
なんで_UNICODEUNICODEの2つを定義しないといけないのだろう
ググったらどちらも必要だと解説記事があるのだが、公式ドキュメントがとっちらかっていて正しいかの確認に困る
https://learn.microsoft.com/ja-jp/windows/win32/intl/standard-c-functions
https://learn.microsoft.com/ja-jp/windows/win32/intl/windows-data-types-for-strings

Discussion