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#でリストから複数の要素をランダムに重複せず取得する

C#であるリスト(IList)の中から重複しない複数の要素をランダムに取得します。 「任意のデータが入ったListを対象にランダムに値を取得でき」、操作後に「対象のリストは抽出前と後で変化しない」ことを条件とします。 Unityの場合、Random.Next(N, M) を …

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

DictionaryのKeyに指定するオブジェクトを工夫することで複数のキーを指定できるようにしたいと思います。ただし、検索するとよく出てくるTupleクラスを使用した方法はコードが見づらい(というか書く値の意味が不明瞭化する)ためメリットが薄いです。従っ…

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

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

C#でTypeInitializationExceptionが発生する

ある日突然プログラムを実行したら「TypeInitializationException」が発生した場合の対処法です。 自分のコード内であれば、大体半分くらい確率で以下の状況です。残りの半分は外部の環境(リンクしてるDLLとか…)で発生しているので環境を再インストールす…

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°方向の入力ができるスティックキーです。 実際に実装するとこんな感じになります。 よくコントローラが画面の下部に表示されてい…