C++」カテゴリーアーカイブ

LattePanda と Siv3D(仮)

このエントリーは Siv3D Advent Calendar 2017 – Qiita の 12 日目のエントリーです。前のエントリーは、para7 さんの OpenSiv3Dのトランプ描画機能(PlayingCard) です。 LattePanda とは 唐突ですが、LattePanda という組み込みボードがあります。組み込みボードというとRaspberry Pi が有名だったり、もっと小さくやろうと思うと Arduino が良かったりというのもあるのですが、Raspberry Pi は OS が Rasbian という Linux であったり、Arduino の場合はそもそも OS が無かったりという特徴があります。じゃあ、LattePanda はなんじゃ?というと、 Arduino のような GPIO ピンを持っていて Windows 10 が動く という特徴を持つボー … 続きを読む

カテゴリー: 開発, C++ | コメントする

SWIG の文字列(string)の扱いが少しややこしいので、Marshal.* を使ってみるテスト

内部コードを std::string/char * にするか std::wstring/wchar_t * にするかで、SWIG の挙動が変わるような感じなので、その前段階のテスト 戻り値をstring型にする SWIG の技 C#側からみればC++のDLLから文字列を取得したい場合、GetName( const char *, int ) としてバッファを渡すよりも、string GetName() な形で、string 型を返して欲しいわけです。そうなると、dllimport の部分も な形にしておきたいところですよね。しかし、これはできません。戻り値は string に自動変換してくれないんですね。 不思議なことに、SWIG の場合は戻り値に string を使えて、まあこんな風に string 型を渡したり受け取ったりできます。 当然のことながら、これは Hello クラス内でラッ … 続きを読む

カテゴリー: 開発, C#, C++ | コメントする

SWIG を使って C++ のクラスを C# で読み込む方法

FFFTP2 のライブラリ化の前調査として、C++ のクラスに書き替えたときに、.NETから呼び出すことができるだろうか?というのを調べていました。基本 C# から C/C++ を呼び出すときは dllimport を使う訳ですが、これは「Cインターフェース」を使っているので、C++のクラスを直接呼び出すことはしていません。なので、C++の場合は、一度Cのインターフェースに直して呼び出さないといけないですよね。OpenCvSharp の場合も、OpenCV を呼び出すときに、dllimport を使っていますが、ひとつひとつ C インターフェスに直して組み替えています。ここの手間がなんとも言えないのと、将来的に C++ の構造が変わったときにはこの部分を手作業で直さないといけませんよね(実際 OpenCV2 から OpenCV3 の変換のときに発生している問題で)。となれば、Xamarin … 続きを読む

カテゴリー: 開発, C#, C++ | コメントする

アリスはカンマとコンマを区別する

久々のアリプラシリーズです。 こっ…これは…! コードから…深い味わいが伝わってくる… クソコードのはずなのに… な…何故だ!? このクソみたいな見た目に反した、爽やかな口当たり… そうだ…解ったぞ…桑の実(operator ,)だ! …小癪な真似を… このコードを書いた奴は誰だぁっ!! — h.omae (@pigeon6) 2014, 3月 19 元のコードはc++なんですかね?と思って自分でコードを書いてみます。ええと、カンマ(コンマ)「,」演算子は、マクロでは使うけど演算子のオーバーロードをすると関数の引数とややこしくなるわけですが、「爽やかなコード」になるかどうかは分かりません。 確か、,演算子は優先度が一番低いから、そのあたりも含めて使うといいかも。 最後の式の値を返すので、zの値は20になりますね。そのあたりを利用したマクロが量産される訳ですが。バッドテクニックと言えなくもな … 続きを読む

カテゴリー: C++ | コメントする

[C++/CLI] モニタの解像度をプログラムから変更する

たまに C++/CLI の記事などを。Visual Studio 2012 からは C++/CLI もインテリセンスが使えるようになったので、C# と win api を媒介する C++/CLI のプログラミングもばっちりですね…って、2010 の時に出してほしかったよなぁ。ちなみに、2012 では C++/CLI でフォームアプリケーションが作れない(ことはないけど、テンプレートに入っていない)ので、そのままフェイドアウト…なのか? それとも C++/CX と融合するのかは謎なところです。 ■解像度とモニタを指定する 解像度自体は、ChangeDisplaySettingsEx 関数を使いますが、複数のモニタがある場合はデバイス名が必要にあんるので、あらかじめ EnumDisplayDevices で取得しておきます。 本来は、モニタのリストとかを取ればいいのです … 続きを読む

カテゴリー: C#, C++ | コメントする

[C++] NULLポインタアクセスをMFCはどのように回避して…いないか。

null/nil の扱いをオブジェクト指向的に考え直す | Moonmile Solutions Blog http://www.moonmile.net/blog/archives/3770 なところで、Objecitve-C の nil の「優れた」扱いについて書きましたが、実は MFC(Microsoft Foundation Class)にも NULL ポインタに対して「優れた」扱いをしているのです、という話をひとつ。 MFC ってのは、Windows アプリケーションを作る時のクラスライブラリで、似たようなものには Delphi のライブラリがあります。ウィンドウシステムを扱うときに、直接の Windows API を扱うよりもクラスを使ったほうがまとまりが良い、ってのが主旨ですね。これを押し進めたのが、Windows RT なんですが、またこれは別の機会に(というか、この話はあ … 続きを読む

カテゴリー: C++ | コメントする

null/nil の扱いをオブジェクト指向的に考え直す

Objective-C で nil のメソッドを実行すると例外が発生しないのは変…ではないよ、というのを解説。 ■そもそもの NULL の意味 C++ も Objective-C も C言語を発端としているので、「NULL」≒「値が無い状態」というのを継承しています。 御存じの通り、C言語では、NULL というのは(void*)0 あるいは 0 として定義されています。定義されているのですが、これが NULL という意味を示しているかどうかは別なのです…が、「現実主義的な」C言語としては、NULL = 0 のほうが都合が良かったわけですよ。 基本は NULL はポインタとして扱うので、0 ポインタ自体を「有効」にできないという矛盾があります。かつて、8bit 時代の CPU ではメモリが貴重だったので、0 ポインタを「無効」にするとはなんということかッ!!! という … 続きを読む

カテゴリー: C#, C++, Objective-C | 8件のコメント

[C++] そういえば auto の落とし穴を示しておくと

C++11 あたりから、つーか、VC++2008 でもあったような気がするのですが、C++ では C# の var のように auto が使えます。 VB.NET の dim が dim に変わったように、C++ の auto が auto に変わったわけですが、昔の auto を知らない方は、まあ、知らなくてもよいかと。事実上使わなかったし。 さて、C++ でも auto で型推論ができるようになった訳ですが、これにちょっと落とし穴があるってのを少し。 auto を何に使うかというと、最初は typedef の代わりですかね。よくやる std::vector<string>::iterator ってのを、var で書き直すと非常に楽になります。 こんな風に横に長いコードが という風に書けます。かつては、typedef をして というコードもあったのですが、これで無駄な typ … 続きを読む

カテゴリー: C++ | 4件のコメント

[C++]ATLで64bit版のCOMを作成する

Twitter / Marupeke_IKD: Windows7下でVisualStudio2005 … https://twitter.com/Marupeke_IKD/status/245237326995927040 なところで、「Windows7下でVisualStudio2005で64bitなATLをVC++で作って、それを同じくVS2005環境で64bitビルドなVBで使おうとして「参照の追加」をするのだけど」の部分が気になって、一応確認してみたという話を少し。 VB6 自体は、Windows 7 上では動かないので、 Windows 7 上の Visual Studio 2005 で 64bit の COM を作成 Windows XP(かな?)の VB6 で先の COM を参照 なところでしょう。「VB の参照設定に出てこない」というところは、ファイルを参照させ … 続きを読む

カテゴリー: C++ | コメントする

[C++] レガシーライブラリをクラスで包んで再利用する

手元にあるものがレガシー(遺産)と言う訳ではないのですが、15年程まえの技術で作ってあるので、これに機能を追加するのに苦労しています。 まあ、業務的には「元のコードスタイルに合わせてコーディングする」のが良い訳で、そこそこ手を加える量が少なければそれでも良いのですが、がっつりとコーディングしないといけないとなると、ひと苦労ってことになります。 そうなると、レガシーならばレガシーなりに捨て去ってしまう、というのもひとつの選択肢に上がるわけですが、現実的にはそうも言えません。予算的な問題とか、実現可能性の問題などがありもともとのコードを継承しないと駄目なわけです。COBOL やホストコンピュータの世界では普通に起こっている話で、ぼちぼち10年前のコード自体も辛くなってきていますよね、って話です。そういう分野の「考察」も必要かと思い始めていますが、そのあたりは別の機会に。 さて、既存のデータが「 … 続きを読む

カテゴリー: C++ | コメントする