fc2ブログ

Visual C++ 2015でWindowsフォームアプリを作る(2)

 前回、大変面倒な手順で作成したC++のWindowsフォームアプリですが、もっと簡単な方法があることが分かりました。
「オンラインのC++用のフォームテンプレート」です。前回はインストール済みのテンプレートでしたが、今回はオンラインのVisual C++の「C++ Windows Forms」を利用しました。

 「ファイル-新規作成-プロジェクト」を選択し、新しいプロジェクトの「オンライン」のVisual C++から「C++ Windows Forms」を選択します(プロジェクト名はデフォルトのCppWinForm1を使います)。テンプレート1_160430OKボタンを押すと、「ダウンロードとインストール」のウィンドウが表示されましたので、「インストール」ボタンを押します。テンプレート2_160430結果、前回お話しした内容と同じ環境が作成できました。あっという間でした。テンプレート3_160430前回と同様に、ボタンを押して簡単な表示が出るコードを組み込むと、無事に動作しました。テンプレート4_160430オンラインのテンプレートは大変重宝なことがよく分かり、勉強になりました。これからも利用しようと思います。
スポンサーサイト



Visual C++ 2015でWindowsフォームアプリを作る(1)

 OpenCVで画像処理を行うのに、C#でOpenCvSharpをよく用いています。仕事でC#を使うことが多かったのと、画像処理の条件出し(フロー検討やその各画像処理の閾値設定)を行う上でGUIがあると非常に便利で分かりやすかったからです。ただ、OpenCVは今でもC++で書いて、CUI環境で実行することが多いように思います(主観?)。ネット上の参考記事もC/C++関連が圧倒的に多いですね。

画像処理フローがすでに分かっている場合ならCUIアプリで良いと思いますが、条件出しをコード上でパラメータを微調整しながら行うのは非常に大変ですね。OpenCvSharpを用いてC#でコードを書くのも手ですが、やはりネット上で情報の多いC++で攻めて行くのが良いのではないかと最近痛感しています。C++で書いておけば、仮にOSがLinuxになろうが、OSXになろうが、コードをそのまま転用ができますからね。
とはいえ、C++に手を出すのは、今でも抵抗があるので、これから難儀しそうです。

いつもの長~い前置きはこれぐらいにして、Visual C++ 2015で簡単なWindowsフォームアプリの味見に、いざ出発です。Visual Studioを起動させ、C++で「ファイル-新規作成-プロジェクト」を選択し、新しいプロジェクトの中から「Windowsフォームアプリケーション」を探したのですが、あれっ、見当たらない・・。念のため、C#のほうで確認すると、当然ですがありました。C#テンプレート160430
昔々、C++でフォームアプリを作りかけていたことがあったので、とうとうMicrosoftはC++ではフォームアプリをサポートしなくなったのかなと、勝手に思いつつ、ネットで情報を探していると、このサイトに、Visual C++ 2012を例にフォームアプリ作成手順が書かれてありました。早速参考にさせていただきました。以下、Visual C++ 2015版の備忘録です。

1. 「ファイル-新規作成-プロジェクト」を選択し、新しいプロジェクトのVisual C++のCLRから「空のCLRプロジェクト」を選択します(プロジェクト名はデフォルトのProject1を使います)。CLRは共通言語ランタイム(Common Language Runtime)で.NETアプリを実行するためのエンジンのことですね。c_form1_160430.pngOKを押した後のこの時点の状態をソリューションエクスプローラで確認すると、以下の通りです。ファイルが何も入っていない状態です。c_form2_160430.png

2.「プロジェクト-新しい項目の追加」を選択し、Visial C++のUIから「Windowsフォーム」を選択します(フォーム名はデフォルトのMyForm.hを使います)。c_form3_160430.pngここでやっとフォームが出てくるのですね。追加ボタンを押すと、参考サイトに記載の通り、以下のエラーがでましたが、無視して進みます。c_form4_160430.pngこの時点の状態をソリューションエクスプローラで確認すると、以下の通りです。c_form5_160430.pngソースファイル(MyForm.cpp)、ヘッダファイル(MyForm.h)の他に黄色枠に示した.NET Framework関連の情報が組み込まれました。実際にボタン等を貼り付けるのは、ヘッダファイル(MyForm.h)の方です。ヘッダファイルにGUIを実装するのは何となく違和感を感じますが、気にせずに進みます。この状態で実行させてみると、「エントリポイントを定義しなくてはなりません」と怒られてしまいました。main関数がないようです。

3.MyForm.cppにコードを追加
MyForm.cppの中身を確認すると、1行目の記述しかなかったので、以後のコードを追記しました。

#include "MyForm.h"

using namespace Project1;

[STAThreadAttribute]
int main() {
MyForm ^fm = gcnew MyForm();
fm->ShowDialog();
return 0;
}

実行すると、エラーはなくなり、フォームが表示されました。が、背景に不要な黒いWindow(コンソールウィンドウ)が表示されていました。c_form6_160430.png
4.コンソールウィンドウを消す
「プロジェクト-Project1のプロパティ」を選択し、「構成プロパティ - リンカー - システム」のサブシステムを「Windows(/SUBSYSTEM:WINDOWS)」に設定します。c_form7_160430.pngこの状態で実行するとエラーが出てしまうので、、「構成プロパティ - リンカー - 詳細設定」のエントリポイントに 3.で追加したmainを記入します。c_form8_160430.pngここで実行すると、下図の通り、コンソールウィンドウも消え、無事にフォームのみが表示できました。c_form9_160430.pngここまで来れば、あとは、ボタン等をフォームに貼り付けて、個々のコーディング作業ができますね。c_form10_160430.pngボタンを押して、簡単な文字表示もできました。C#と同じようにコーディングができそうです。以上の一連の手順ですが、面倒な作業ですね。この備忘録をまとめている最中に、「オンラインでC++用のフォームテンプレート」があることを知りました。次回はそのことについて書きたいと思います。

名古屋 ものづくり ワールド 2016に行く

 今日、休暇を取って、「ポートメッセなごや」で開催していた「名古屋 ものづくり ワールド 2016(展示会)」に行って来ました。会社の出張ではなく、個人的に参加しました。出張だと、出張許可をもらう所から、後々の報告までが面倒だったりします‥。妙な邪心も入ってしまいますし‥。また、期待に反して収穫がなかったりすると報告するネタがなく大変困ってしまいます。そこで、今回は「みそカツ」を食べに行くのがメインで、展示会は二の次という口実で気楽にいざ出発です。
 
 この展示会はインテックス大阪で毎年秋頃開催されている「関西ものづくりワールド」の名古屋版です。名古屋開催は今回が初めてとのこと。機械要素技術展と設計・製造ソリューション展がセットで開催されていました。

 収穫の点から言うと、期待はずれでした。大阪に比べると規模が小さく、個人的に興味のあるロボットや情報システム分野の展示は少なく、かつ変わり映えがしない‥。特別講演も2つ(スマートファクトリ、インダストリ4.0に関するものと、IT戦略に関するもの)を情報収集のため聴きましたが、これもまた大きな収穫なしです。会社の現担当業務からの距離があり過ぎたのでしょう。また、技術的内容がほとんどなく、講演者の会社の宣伝色が強く、楽しくなかったですね。
 
 ただ、展示会を通じて、ものづくり(Factory Automation)の業界全体が、IoTやビッグデータを取り入れたサービス・ソリューションを取り入れ始めている雰囲気は感じることができました。まだまだ手さぐり感が満載状態ですが、これからの技術展開はしばらく要ウォッチですね。以上、出張?報告終わります。

P.S. 結局、「みそカツ」は食いそびれました。これまた残念…。残念づくしの1日でした。

Excel2000の終了時のエラーを直す

 時代遅れも甚だしいですが、いまだにExcel2000を大事に使っています。使用頻度はあまりなく、たまに計算やデータ入力に使用する程度です(だから、更新していないのですが・・言い訳です・・)。
 今日、久々に使用すると、Excel終了時に以下のエラーが表示されました。160417Excelエラー 「デバッグ」を押すと、Visual Studio 2015が起動し、「プログラムの終了」を押すと、エラーは出たものの終了はしてくれます。ファイル保存もできるので、実使用上は問題ないのですが、大変気持ち悪いです。
 このエラーですが、今回が初めてではありません。以前、Visual Studioをインストールした後に、同じ問題が起きていたことを思い出しました。そういえば、2週間前にVisual Studio 2015の機能更新のインストールをしたことも思い出しました。大変怪しいと思い、以前対処した際に参考にしたこのサイトの内容を参考に調べてみました。
 レジストリエディタで、HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Office¥Excel¥Addins¥TFCOfficeShim.Connect.14のLoadBehaviorの値を確認すると、0でないといけない値が3になっていました。案の定です。早速0に修正しました。160417settei1.png さらに、Windows7 (64bit)マシンの場合は、もう一箇所、HKEY_LOCAL_MACHINE¥SOFTWARE¥WOW6432Node¥Microsoft¥Office¥Excel¥Addins¥TFCOfficeShim.Connect.14のLoadBehaviorの値も確認すると、3だったので同様に0に変更しました。160417settei2.png 修正後はエラーなく、Excel2000は正常終了するようになりました。やれやれです。Visual Studioを更新するごとに、この対応を毎回する必要があるのでしょうか??使用頻度の少ないExcelを更新(購入)するよりはまだマシかもしれません。

Raspberry PiでUARTを使う(3)

 前回までで配線が完了した所までお話しましたので、今回はPCとRaspberry Pi間のRS-232C通信のお話です。手順は、このサイトこのサイトを参考にしました。ただし、私の使用している環境では、これらのサイトの記載内容と異なる部分がありましたので、記録に残しておきたいと思います。

 まずは、Raspberry Pi側の設定(/boot/cmdline.txtの修正)です。このファイルの元の内容は、以下の通りでした。
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p6 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
 このファイルについて、以下の修正を行いました。
追加:rpitestmode=1
削除:console=ttyAMA0,115200 (参考サイトには、kgdboc=ttyAMA0,115200も削除と書かれてありましたが、私のファイルにはもともとその記載がありませんでした。)
dwc_otg.lpm_enable=0 rpitestmode=1 console=tty1 root=/dev/mmcblk0p6 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
 修正後にリブートして、次に/etc/inittabを編集しようとしたのですが、このファイルがどこにも見つかりませんでした。Findコマンドで調べたのですが、見つからず・・。このファイルの編集しなくてはならない内容は既存の通信設定をコメントアウトするもののようです。もともとファイルがないことから、無視して進むことにしました。ファイルがない原因はよく分かりません・・。
 ファイルの設定を終え、minicomのインストールもマニュアル通り、終えました。PCへの接続は、前回の配線図のPC側端子を一旦D-sub9ピンメスの部品で受けて、以下の「D-sub9ピンオスーUSBケーブル」を用いて行いました。 通信確認は、Windows10環境下でTera Termを用いて行いました。もともとTera TermでRaspberry Piを操作しているので、もう1系統ウィンドウを開いて確認しました。つまり、以下の2つの通信が動いています。
 1. WiFi(SSH)経由でRaspberry Pi(192.168.11.18)を操作する通信
 2. RS-232C通信
result1_160410.png 上のウィンドウはPC側のモニタで、下のウィンドウはRaspberry Pi側のモニタでminicom画面を表示しています。PC側からRaspberry Piへデータを送信すると、result2_160410.png 正しく、Raspberry Pi側にデータが受信できました。また、逆にRaspberry Pi側からPCへデータを送信すると、result3_160410.png これも無事にPC側に受信できました。result4_160410.png 送受信OKです。WiFiでそもそもつながっているので、このシチュエーションではありがたみはないのですが、Raspberry Piと「WiFiのない計測器」などの間のRS-232C通信ならば重宝しそうです。

Raspberry PiでUARTを使う(2)

 前回の続きです。マキシム製のMAX3232ECPEは、下図のような16ピンのICです。MAX3232_1_160410.png データシートこのサイトを参考にして、配線を検討しました。標準動作回路は以下の図の通りです。MAX3232_2_160410.png 各端子の機能を下表にまとめました。Vccは3.3Vですが、コンデンサを用いて、チャージポンプの原理で、±5.5Vを作り出しています。Raspberry Piからの入力は10, 11番端子、Raspberry Piへの出力は9, 12端子です。また、PCからの入力は8, 13端子、PCへの出力は7, 14端子です。2つのトランシーバが構成されています。MAX3232_3_160410.png 最終的に、以下の回路を構成しました。UARTcurcuit.png 次回は、実際に行った通信についてお話しします。

Raspberry PiでUARTを使う(1)

 今回は、Raspberry PiでUART、つまりRS-232C通信を行いましたので、その備忘録です。
通常、パソコンとRaspberry PiはWiFi経由で接続していますので、下図の8番端子と10番端子は今まで使ったことがありませんでした。RS-232C端子がついている制御機器(最近あまり見かけにくくなりました・・)と通信する場合のためにも、味見をしたいと思いました。RPi端子160410 そもそも、UARTとは何ぞや?ということですが、Wikipedia曰く、以下の通り。
UART(Universal Asynchronous Receiver Transmitter)は、調歩同期方式による「シリアル信号をパラレル信号に変換」したり、その「逆方向の変換」を行うための集積回路である。本機能のみがパッケージングされたICで供給されるものと、マイクロプロセッサのペリフェラルの一部として内蔵されるものとがある。「マキシムのMAX232」のような、「RS-232C規格に準拠する信号レベルに変換するIC」と組み合わせて、外部機器とのインタフェースとして利用されるのが一般的である。
 要は、UARTとは、「シリアル転送方式の信号とパラレル転送方式の信号を相互に変換するためのIC」、つまり「RS-232C規格に準拠する信号レベルに変換するIC」のことのようです。

 今まで何も意識せずに、RS-232C通信で計測器などのデータを採取していたこともあり、信号の中身までは十分理解していませんでした。良い機会なので、「RS-232C」の信号規格について、ネットで調べてみました。
        RS-232C(Recomended Standard 232 Class)の信号レベルRS-232C_1_160410.png
 RS-232Cの信号レベルは、CMOSやTTLの電圧レベルとは異なった独自の電圧レベルを採用していることが分かりました。よって、レベル変換するICが必要になるのですね。そこで、今回は、このICとして、マキシム製のMAX3232ECPEをマルツで購入して使うことにしました。次回に続く。

OneDrive APIを使う(2)

 前回の続きのVisual Studio 2015の機能更新のためのセットアップです。setup2_160403.pngセットアップの不足があっては、また面倒なので、「すべて選択」にチェックを入れました。その中身は以下の通りです。settingall0_160403.png 「次へ」を押して先に進むと、選択されている機能が表示されます。setting3_160403.png この内容も長いですが、備忘録のために残しておきます。表示すると以下の通りです。settingall1_160403.png 「更新」ボタンを押して、インストール開始です。約1時間待ち、無事終了。
 続いて、OneDriveSdk.slnをビルドします。そのソリューションファイルには、OneDriveApiBrowserやOneDrivePhotoBrowserなどが含まれています。スタートアッププロジェクトとして、OneDriveApiBrowserを選択し、実行すると、以下のエラーが発生。err_160403.png エラー内容がよく理解できないまま、Releaseモードではなく、Debugモードで実行すると動きました。Releaseモードで動かなかった原因は後日調査します・・。
 実行すると、以下の画面が出ました。odapibrowser1_160403.png「File - Sign in to MSA」を選択すると、Microsoftのアカウント認証後に、以下ような認証画面が表示されました。odapibrowser2_160403.png「はい」を押すと、自分個人のOneDriveのフォルダの中身が表示されました。大変長〜い道のりでした・・。odapibrowser3_160403.pngフォルダの下の階層にも自由に入れます。サンプルプログラムでは右側に、ItemのPropertiesとして、JSON、TreeView、Object Modelが選択できるようになっています。それぞれ何を意味しているのか、現時点では理解できていません。odapibrowser4_160403.pngプログラムをなんとか動かせる所まで漕ぎ着けましたが、まだ、プログラムがどのようなことを行っているのか、中身を十分理解できていません。引き続き、勉強していこうと思います。



OneDrive APIを使う(1)

 自分個人のOneDrive(クラウドストレージ)内のファイルの読み書きがしたいと思い、ネットで情報をかき集めていると、OneDrive APIなるものがありました。Windows、Web/JavaScript、iOS、AndroidのそれぞれでSDKも提供されていました。早速、どのようなものか味見がしたくなり、サンプルコードもあったので、それから試そうと思いました。 odsamp160403 OneDrive API Explorer(アプリ名はOneDriveApiBrowser)をクリックすると、GitHubに飛びました。いまさらで恥ずかしいですが、GitHubの名前自体は知っていましたが、ほとんど使ったことがありませんでした。使い方が分からず、別の方法を探してネットをさまよっていると、このサイトに行き着きました。導入方法が書かれてあり、zipファイルのSDKがあることが分かりました。先ほどのサンプルコードも入っているzipファイルです。よくよく見ると一番初めに見ていたGitHubのページは、今のページの下層のページでした・・・。なんとなんと・・。github160402.pngGitHubの使い方については、今後、要勉強です・・。早速、今回登録しておきました。
zipファイルを早速ダウンロードして、Visual Studioでビルドしてみました。
setup1_160403.png Visual Studio 2015の環境が最新でなかったようです。何事も準備が重要ですね。それでは、約1時間の機能最新化のインストールの旅に出ます。次回に続く。

Raspberry PiでSQLiteを使う(3)

 前回までで、Local PC環境のPHPでデータベースの読み込みとデータ表示ができるようになりました。契約しているプロバイダにプログラムとデータベースをアップロードして、動作確認を行ってみたのですが、うまく行きませんでした。調べてみると、PHPの実行はサポートされていないとのこと。そこで、仕方なく、自宅サーバ(Raspberry Pi)で実行する環境を作ろうと思い立ちました。
 Raspberry Piには、ApacheもPHPもすでにインストール済みなので、サーバ機能として使える状態です。ただ、実行してみると、以下のエラーが・・。err160402.png ドライバーがなく、データベースに接続できないようです。phpinfoで確認すると、
settingbefore0_160402.png SQLiteが認識されておらず、 settingbefore1_160402.png PDOドライバも何も設定されていませんでした。Raspberry Piには、そもそもSQLiteがインストールされていないのだなとその時、理解しました。
 早速、以下のコマンドを打ち込んで、SQLiteをインストールしました。
apt-get -y install php5-sqlite
インストール後は、php.iniファイルを編集し、pdo.soとpdo_sqlite.soを組み込むため、以下の内容を追記しました。私のRaspberry Piの環境では、それぞれのファイルは表示の箇所にありました。phpini160402.png 設定変更し、Raspberry Piを再起動後に確認すると、
settingafter0_160402.png SQLite3が登録され、settingafter1_160402.png ドライバも組み込まれました。
 設定したこの環境で、MacBook AirやiPadからRaspberry Piサーバに接続し動作させると、無事にデータベースのデータを確認することができました。今後、どのようなシステムに仕上げていくかは検討課題です。個人的には、ハードルは高いですが、OneDriveやiCloudのようなクラウドストレージにデータベースは置いておきたいと考えています。

ご訪問者数

(Since 24 July, 2016)

タグクラウド


プロフィール

Dr.BobT

Author: Dr.BobT
興味のおもむくままに生涯考え続けるエンジニアでありたい。

月別アーカイブ

メールフォーム

名前:
メール:
件名:
本文: