C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

2018-01-01から1年間の記事一覧

C#: generics<T> + object 黒魔法 vs. 非ジェネリクスメソッド 実行速度編

前回の記事「C#: 組み込みの数値型を扱いたい generics の 型と IConvertible の肝っぽい事、それと object 型を暗躍させる必要性のメモ」で C# の generics で数値計算を実装すると結局 object の暗躍が必要なので実行時コストが気になるよ、でもまあ実行コ…

C#: 組み込みの数値型を扱いたい generics の <T> 型と IConvertible の肝っぽい事、それと object 型を暗躍させる必要性のメモ

// 前提; この記事の Fail とか AreEqual とかはこいつの↓ using static Microsoft.VisualStudio.TestTools.UnitTesting.Assert; // 任意の IConvertible を別の IConvertible に数値を保持して変換したい場合 public static B C<A, B>( A a ) where A : IConverti</a,>…

C#, LINQ, Lambda-expression: LINQ の query-expression の中の select 句で lambda-expression を吐かせたい。でも C# ちゃんが翻訳死しちゃったの、ってスタック・オーバーフロー・チャンスしたら .NET イケメンの Reza Aqhaei が助けてくれたメモ。

// Example-0; 突然の翻訳死が訪れるよ var xs = from v in Enumerable.Range( 0, 4 ) select w => w; こういう事をしたいけど、これじゃ C# コンパイラーちゃんが死んじゃう error CS1942: An expression type in select' clause is incorrect. Type infere…

C#: null れる class と null れない struct いずれの可能性もある object を as<T> したい場合の限界、あるいは C# らしい結論

// これはコンパイルできない(´・ω・`) // object -> T static public T As<T>( object o ) { return o as T; } // as T できるためには T に class 制約が必要。これはコンパイルできるし、期待動作するかもしれない。 // object(class=nullれる何か) -> T st</t>…

C#, WPF, XAML: System.Windows.Controls.Control が "いわゆるコントロール" の共通基底だと思い込んで実装したら TextBlock であっさり null 例外に殺された件

// 前提、 C#-7.0 using System.Windows.Controls; var c = new Control(); if ( c is Label l ) Console.WriteLine( $"Label.Content={l.Content}" ); if ( c is TextBlock t ) // <--ここでコンパイルエラーが生じてくれる。 Console.WriteLine( $"TextBlo…

C#-7.0: 滲み出すスコープ

Visual Studio の C# プロジェクトでも Error も Warning も1件も見逃さない綺麗なビルドを心掛けていますが、 Messages は見落としていました。何件か来ている。 まず、一番上を見る。 IDE0018: Variable declaration can be inlined とやら。 IDE0018 "Var…

WPF,XAML: Image に Source で入れると極端にぼやけたり何かがおかしい JPEG に遭遇してしまった時の簡単な対処方法

仕事で扱ってもいるので国土地理院の地理院地図のタイル画像データはよく使わせて頂いています。います、のですが、これがたまにメタデータだったりピクセルフォーマットだったりが奇妙な画像ファイルに遭遇する事がたびたびあります 今回は地理院地図のJPEG…

C#/.net/NuGet: nuget デビューしたはなし

usagi.cs ; わたしが欲しいと思った適当な機能たち for C# nuget -> NuGet Gallery | usagi 0.0.0 repos -> GitHub - usagi/usagi.cs: わたしが欲しいと思った適当な機能たち for C# 数年ぶりに C# の実装を書いていて「きぶん」と「おもいつき」で書いてみ…

UE4/C++: USoundWave と USoundCue または何れにせよ USoundBase でいいやのメモ

UE4 プロジェクト内のアセット化された「なにか」を C++ コードの ctor で拾いたい場合には以下のようにする、するのだが…: #include "Runtime/CoreUObject/Public/UObject/ConstructorHelpers.h" // どこかの UObject 系の ctor でプロジェクト内のアセット…

C#: ビルド番号の自動採番の有効化と Properties.Settings.Default の Upgrade トリックの必要について

遠いむかしの記憶、 C# というか Visual Studio のプロジェクト管理システムにはバージョン番号の一部を自動採番する便利な機能があった、ような気がした。実際に執筆時点で現行製品の VS2017 で作った C# のプロジェクトの AssemblyInfo.cs にも次のコメン…

XAML: 同じ ItemsSource を持つ複数のコントロールの効率的な定義の仕方、あるいは ItemsSource を StaticResource で別定義する方法

例えば同じ要素軍を選択肢として提示する複数のコンボボックスを配置したいとしよう。以下のコード例は何れも <Window> の内部に定義している。 <ComboBox Name="CB1"> <ComboBoxItem Content="選択肢1"/> <ComboBoxItem Content="選択肢2"/> <ComboBoxItem Content="選択肢3"/> </ComboBox> <ComboBox Name="CB2"> <ComboBoxItem Content="選択肢1"/> </comboboxitem></combobox></window>

C#/JSON: Newtonsoft.Json の最も簡単な使い方

C#er には標準ライブラリーに準じてお馴染みらしい JSON を扱うライブラリー Newtonsoft.Json があるようだ。しかし、こういってはなんだがろくな解説が無い(個人の感想です。)ので私が使うにあたり最低限調査したメモを残す。 使用する主な名前空間は2つ…

Windows: スタートボタンが死んだ日

Note: 今回はわりとエッセイ的ななかみです。 もう数年程度は必要の無かったので Windows 10 は(昔に比べれば)安定動作してくれてその点では余計な手間が少なくなって嬉しいな、と思っていた。 だが、今日は スタートボタン が死んだ タスクバーの他の機能…

.net/XAML: bool を反転して Binding したかっただけなんだ

XAML で UI を作っていたんだ。 <CheckBox IsChecked="{Binding Awabi}"/> <CheckBox IsEnabled="{Binding !Awabi}"/> 先日の 「.net/XAML/C#: XAML のプロパティーは Visibility 型だけど Boolean の DataContext に束縛したい場合の最適解、あるいは BooleanToVisibilityConverter について」 の例から IValueConverter を実装した Inverse</checkbox></checkbox>…

UE4/C++/BP: UGameplayStatics::OpenLevel の Options が ? に化ける怪異、あるいは UEngine::SetClientTravel のパラメーターの本当の意味について

次のコードあるいは相当のBPは期待とは異なる動作を招くかもしれない。 UGameplayStatics::OpenLevel ( GetWorld() , TEXT( "Sushi" ) , true , TEXT( "#Tako" ) ); 『このようなレベルの開き方をした場合、開かれたレベルでは AGameMode::OptionsString が …

UE4/C++: UEDirectInputPadPlugin を Fork してにゃんにゃん

katze_7514 さんの UEDirectInputPadPlugin を Fork して でにゃんにゃんしました。 Fork 先: usagi/UEDirectInputPadPlugin Fork 元: katze7514/UEDirectInputPadPlugin UE4 には 4.15 以降は標準で Windows RawInput Plugin が入りましたが、 軸の入力値が…

.net/XAML/C#: XAML のプロパティーは Visibility 型だけど Boolean の DataContext に束縛したい場合の最適解、あるいは BooleanToVisibilityConverter について

「Boolean なプロパティー Hoge が DataContext に束縛された Window のにある何かのコントロール(下の例では Button )の Visibility プロパティーを XAML だけで簡単に Window の DataContext の Hoge に束縛したい!」と思ったんだ。 <Window ... 略 ...> ... 略 ... <Button Visibility="{Binding 😂 Hoge ? Visible : Hidden したいんだけど!!😂}"/> ... </button></window>…

UE4/C++: NewObject で生成したオブジェクトの Outer を変更したい場合のメモ

↓こういうのが居たとする。 // UObject 派生だがシングルトンファクトリーで生成されるオブジェクトがあったとする UA* UA::GetInstance() { if ( ! my_static_instance ) my_static_instance = NewObject< UA >(); return my_static_instance; } このような…

C#: Windows 青魔法により別プロセスのコマンドラインを掠め取ってくる方法、または WMI の使用方法

残念な事に別プロセスの起動時に与えられたコマンドライン情報を System.Diagnostics.Process の StartInfo プロパティーの FileName や Arguments から取得はできない。それらはプロセスの起動を自身のプロセスから行う際に自身が設定した場合にのみ意味が…

UE4/C++: ジェネリック・プラットフォーム・罠ビリティー

諸事情により UE4 でゲームではない何かを開発したりユカイなマルチプロセスのゲームを作ったりすると プロセスID を取得したくなるかもしれない。わたしはなった。 UE4 にはそんな時に便利そうな FGenericPlatform::GetCurrentProcessId がある プロセスID…

C#/JSON/HTTP: .net で JSON-RPC-2.0 のクライアントを使ったら WebException が飛び ServerProtocolViolation で蹴られた件

Visual Studio で C# プロジェクトをにゃんにゃんしている土曜日だった。JSON-RPC-2.0 のクライアントを実装する必要があったので NuGet を見ると導入が簡単そうなライブラリーが幾つも見つかる。 NuGet Gallery | Packages matching jsonrpc このへんが使う…

.net./C#/UE4: UE4 製のアプリを C# から起動したり終了したりさせたい場合のメモ、あるいは閉じても閉じても殺しても死なないアプリを殺すメモ。

// Process using System.Diagnostics; // C# アプリから UE4 製のアプリ(に限らず)を起動してプロセスをハンドルする var p = Process.Start( "your-executable-path.exe" ); // 既に動作している UE4 製のアプリ(に限らず)を探してプロセスをハンドル…

C#/WPF: 10年ぶり?5年ぶり? Visual Studio で C# で XAML で WPF で

Note: 今回は技術的内容はたぶん無いよう・w・ たぶんただのエッセイだよう・w・ Visual Studio で C# を書くのはお気持ち的にはたぶん10年ぶりくらい(実際はそんなに長くないよ)。 C# でアプリを書くのは5年ちょっと振りくらい(たぶんほんと)。 C# や…

UE4/C++: C++er がUE4型のシングルトンを作る際に気をつける事

「UE4 にはガベージコレクションがある。しかし特に C++er は正しい実装を過剰に気に掛ける必要がある。」 UE4Editor から GUI でも設定できる GameSingletonClass, GameInstance を使う場合は気にする必要は無い。今回はその仕組みを使わない場合の話。 UOb…

Game: Dragon's Dogma: Dark Arisen とマルチモニターやバックグラウンド動作のパッチ( mod )

この頃 DDDA ( STEAM 版 ) を遊んでいます。ゲームは楽しめているのですが、アプリケーションとしての動作に幾つか悲しみの挙動があり気にしながらプレイしていました。 マルチモニター環境でフルスクリーンを ON にコンフィグすると Left-Top のモニターに…

UE4/C++: USaveData 系のセーブデータの Slot 群をすべて取得する方法

USaveData 派生型のセーブデータを作り UGameplayStatics::SaveGameToSlot, UGameplayStatics::LoadGameFromSlot を用いてセーブとロードを実装する手法を用いるとそれ自体の実装労力は節約できて嬉しい。しかし、これらの API は UE4 プロジェクトの開発時…

UE4/C++: AActor の Tick が来ない!・おまけ編

本編は以前書いた 「UE4/C++ Tick が来ない!そんなときのトラブルシュート備忘録」 です。今回はそのおまけ。 行動パターンで書くと「ああ、なんだ」と気づく事も多いのですが… Tick が来ない!(気づき) PrimaryActorTick.bCanEverTick = true していなか…

UE4/C++: FHttpModule で SetContentAsString して POST で投げたら落ちた時のメモ

次のようなごく簡単な FHttpModule の実装例を実行するとゲームまたは UE4Editor ごとプロセスが落ちてしまう。 TSharedRef< IHttpRequest > r = FHttpModule::Get().CreateRequest(); r->OnProcessRequestComplete().BindUObject( this, &UMyHttpTask::Hand…

UE4/C++: rapidxml を UE4 で使いたい場合の例外不使用化のメモ

1つ前の記事 「UE4/C++: 実行時に取得したドキュメントが SJIS だった時に ICU で UTF8 にしたり UTF16 で TCHAR にするメモ」 でUE4のユーザープロジェクトレベルで ICU ライブラリーを取り込んで文字コードを操作する実装のメモを書きました。この記事の執…

UE4/C++: 実行時に取得したドキュメントが SJIS だった時に ICU で UTF8 にしたり UTF16 で TCHAR にするメモ

実行時にどこかのレガシー文書を HTTP で拾ってきて表示しようとしたら SJIS だった、 EUC-JP だった。あるいはどこか別の文化圏の文字コードだった。 UE4 の文字列処理系は内部表現の UTF16 または変換マクロが定義された UTF8 か ANSI じゃないと扱いが困…