C#の共有メモリで簡単にオブジェクトを共有する方法

C#を使ってプロセス間でデータ共有をする際にオブジェクトを共有する方法です。 プロセス間でオブジェクトを共有したい場合、大抵の場合構造体を定義してメモリに書き込めばすれば良いとネットに書いてあります。ですが、普段クラスで扱っているデータをその…

C#のMemoryMappedFileで作成した共有メモリをC++(ネイティブ)から利用する

C#でMemoryMappedFileを使って作成した共有メモリをVC++(あるいはC言語)から利用する方法です。 条件 .NET Framework VC++ Windows限定(WINAPIを利用) .NET Core & Linuxとかでは全然使えないのでご了承ください。 C#側のコード まずはこんな感じでC#上…

C#のMemoryMappedFile(共有メモリー)でエラーが出たときの対処法

Windows上でサービスなどのシステム権限やAdminisratorsなどの高い権限でMemoryMappedFile使って共有メモリを作成し、一般ユーザー権限のような権限レベルの異なるプロセスから共有メモリをOpenExistingしようとする場合に出るであろうエラーの対象方法です…

PicojsonのJSON書き出しをもっと便利にする

C++でPicojsonというJSONを読み書きするライブラリがあります。 JSONを読みだすときはそんなに苦じゃないのですが、このライブラリを使ってJSONの作成を始めると冗長な表現をする関係でタイプ数が増えて結構面倒なんですよね… // いちいちこんな感じでコード…

Cocos2d-xでOpenSSLを使った256bit AES暗号化・復号化(3.17.1対応版)

以前にCocos2d-xに組み込まれたOpenSSLを使ってハッシュ計算をしましたが今回は、AES暗号化・復号化をしたいと思います。 前回の記事はこちら。 takachan.hatenablog.com 確認環境 確認環境は以下の通り。 VisualStudio2017 Cosoc2d-x 3.17.1 OpenSSL 1.1 AE…

Cocos2d-xでStaticクラスのメソッドやフリー関数をコールバックに指定するマクロ

タイトルにはCocos2d-xと書いてありますが、C++でstaticなメソッドとかフリー関数をstd::bind関数でバインドする方法です。 Cocos2d-xにあるCC_CALLBACK${N}を改造してCC_CALLBACK_S${N}を以下のように定義すると簡単にバインドできるようになります。 // 任…

【C#】リストから要素をランダムにN個取得する

今回は、リストから要素をN個取得する実装方法の紹介をしたいと思います。 いちど選んだ要素はもう使わない + データを取り出した後に元のリストが変化しないように実装していきます。 確認環境 使い方 RandomUtilクラス 関連記事 確認環境 実装環境は以下の…

C#でDictionaryのキーに複数のキーを設定する

2022-01-31 DictionaryのKeyに指定するオブジェクトを工夫することで複数のキーを指定できるようにしたいと思います。ただし、検索する見かける Tuple を使用した複数の値の組み合わせを Dictionary のキーに指定する方法はが見づらい & 値の意味が不明瞭化…

Cocos2d-xで画像を任意の色で点滅させる(3.x系)

Cocos2d-xで画像を点滅させるには、Blinkを使います。このBlinkの動作は、画像を「表示」⇔「非表示」動きをやってくれます。ただ、自分の好きな色で点滅などは出来ません。画像(Sprite)に弾がヒットした時に一瞬白く点滅する等の2Dゲームに割とよくある表…

C#でTypeInitializationExceptionが発生する

ある日突然プログラムを実行したら「TypeInitializationException」が発生した場合の対処法です。 自分のコード内で発生している場合、以降で説明する状況で発生している可能性があります。 // 発生する例外のメッセージ // .NET Core System.TypeInitializa…

Cocos2d-xで2点間の距離・角度を取得する(3.x系)

タイトルの通りですが、何故かCocos2d-xの2.x系で説明されている古めの記事しかなったので新しい(と言っても相当前ですが)3.x系での書き方の紹介です。 2.xと3.xではメソッド名や関数の位置が全然違うので少し書き方が違います。ただ、古いメソッドなどが…

Cocos2d-xでバーチャルパッド(スティック操作)を実装する

今回は、Cocos2d-x(ver. 3.17.1)でバーチャルパッド(スティックキー)を実装したいと思います。 PSやXboxなどでおなじみの360°方向の入力ができるスティックキーです。 実際に実装するとこんな感じになります。 よくコントローラが画面の下部に表示されてい…