void initialize() { if (window_handle_) { return; } if (!(atom_ = ::RegisterClassEx(&window_class_))) { KTL_ERROR( KTL_ERROR_SECTION, SPRIG_KRKR_TJS_W("ウインドウクラスの登録に失敗しました"), sprig::krkr::win32_error ); return; } window_handle_ = ::CreateWindowEx( 0, // 拡張ウィンドウスタイル reinterpret_cast<LPCTSTR>(MAKELONG(atom_, 0)), // クラス名 window_class_.lpszClassName, // ウィンドウタイトル 0, // ウィンドウスタイル CW_USEDEFAULT, // ウィンドウ位置 0, // ウィンドウ位置 CW_USEDEFAULT, // ウィンドウサイズ 0, // ウィンドウサイズ HWND_MESSAGE, // 親ウィンドウ 0, // メニュー window_class_.hInstance, // インスタンス 0 // ウィンドウ作成データのアドレス ); if (!window_handle_) { KTL_ERROR( KTL_ERROR_SECTION, SPRIG_KRKR_TJS_W("ウインドウの作成に失敗しました"), sprig::krkr::win32_error ); return; } }
// // SUMMARY: 読み込み系メソッド // KTL_INLINE bool NativeLayeredSplashWindow::loadImages(tTJSString const& storage) { sprig::com_ptr<::IStream> in(::TVPCreateIStream(storage, TJS_BS_READ)); if (!in) { KTL_ERROR( KTL_ERROR_SECTION, tTJSString(SPRIG_KRKR_TJS_W("ファイルオープンに失敗しました: ")) + storage, sprig::krkr::bad_state ); return false; } LARGE_INTEGER move; move.QuadPart = 0; ULARGE_INTEGER new_pos; if (FAILED(in->Seek(move, TJS_BS_SEEK_END, &new_pos))) { KTL_ERROR( KTL_ERROR_SECTION, tTJSString(SPRIG_KRKR_TJS_W("ファイルシークに失敗しました: ")) + storage, sprig::krkr::internal_error ); return false; } size_type file_size = static_cast<size_type>(new_pos.QuadPart); if (!file_size) { KTL_ERROR( KTL_ERROR_SECTION, tTJSString(SPRIG_KRKR_TJS_W("ファイルが空です: ")) + storage, sprig::krkr::bad_state ); return false; } move.QuadPart = 0; if (FAILED(in->Seek(move, TJS_BS_SEEK_SET, &new_pos))) { KTL_ERROR( KTL_ERROR_SECTION, tTJSString(SPRIG_KRKR_TJS_W("ファイルシークに失敗しました: ")) + storage, sprig::krkr::internal_error ); return false; } std::vector<byte_type> buffer(file_size); ULONG io_size = 0; if (FAILED(in->Read(&buffer[0], buffer.size(), &io_size))) { KTL_ERROR( KTL_ERROR_SECTION, tTJSString(SPRIG_KRKR_TJS_W("ファイル読込に失敗しました: ")) + storage, sprig::krkr::internal_error ); } return impl_->loadImages(&buffer[0], io_size); }
KTL_INLINE void NativeOSVersion::OSVersionInfo::initialize() { if (initialized_) { return; } OSVERSIONINFOEX os_version_info; os_version_info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if (!::GetVersionEx(reinterpret_cast<OSVERSIONINFO*>(&os_version_info))) { KTL_ERROR( KTL_ERROR_SECTION, SPRIG_KRKR_TJS_W("error in GetVersionEx()"), sprig::krkr::internal_error ); return; } major_version_ = os_version_info.dwMajorVersion; minor_version_ = os_version_info.dwMinorVersion; build_number_ = os_version_info.dwBuildNumber; platform_id_ = os_version_info.dwPlatformId; csd_version_ = sprig::str_cast<string_type>(os_version_info.szCSDVersion); service_pack_major_ = os_version_info.wServicePackMajor; service_pack_minor_ = os_version_info.wServicePackMinor; suite_mask_ = os_version_info.wSuiteMask; product_type_ = os_version_info.wProductType; initialized_ = true; return; }
bool NativeStorageStream::readBuffer(binary_type& buffer) { if (!stream_) { return false; } int_type current_pos = current(); if (current_pos < 0) { return false; } int_type total_size = size(); if (total_size < 0 || current_pos < total_size) { return false; } size_type result_size = total_size - current_pos; if (!result_size) { buffer.clear(); return true; } buffer.resize(result_size); ULONG io_size = 0; if (FAILED(stream_->Read(&buffer[0], result_size, &io_size))) { KTL_ERROR( KTL_ERROR_SECTION, SPRIG_KRKR_TJS_W("ファイル読込に失敗しました"), sprig::krkr::internal_error ); return false; } return true; }
// // SUMMARY: シーク系メソッド // KTL_INLINE NativeStorageStream::int_type NativeStorageStream::seek(int_type offset, flag_type flag) { if (!stream_) { return -1; } LARGE_INTEGER move; move.QuadPart = offset; ULARGE_INTEGER new_pos; if (FAILED(stream_->Seek(move, flag, &new_pos))) { KTL_ERROR( KTL_ERROR_SECTION, SPRIG_KRKR_TJS_W("ファイルシークに失敗しました"), sprig::krkr::internal_error ); return -1; } return static_cast<int_type>(new_pos.QuadPart); }
KTL_INLINE NativeStorageStream::int_type NativeStorageStream::writeBytes(byte_type const* data, size_type size) { if (!stream_) { return -1; } if (!size) { return size; } ULONG io_size = 0; if (FAILED(stream_->Write(data, size, &io_size))) { KTL_ERROR( KTL_ERROR_SECTION, SPRIG_KRKR_TJS_W("ファイル書込に失敗しました"), sprig::krkr::internal_error ); return io_size; } return io_size; }
bool NativeStorageStream::readBuffer(binary_type& buffer, size_type size) { if (!stream_) { return false; } if (!size) { buffer.clear(); return true; } buffer.resize(size); ULONG io_size = 0; if (FAILED(stream_->Read(&buffer[0], size, &io_size))) { KTL_ERROR( KTL_ERROR_SECTION, SPRIG_KRKR_TJS_W("ファイル読込に失敗しました"), sprig::krkr::internal_error ); return false; } return true; }