カテゴリー別アーカイブ: software_development

Windowsでファイル名をまとめて変更するのに、C言語でプログラムを書いたのだけどUnicode文字のファイル名でハマって苦労した

Windowsでファイル名をまとめて変更しようとしていた。
で、何かスクリプト言語でちょろっと書いて一気に変換みたいなことをやろうと最初は思っていたのだけど、結局C言語でプログラムを書いてしまった。

ところがANSI版のAPIで書いたらMoveFileでうまく変更できないファイル名が出てきたので、Unicode対応のMoveFileWを使って書き直す等、もとのANSI版のAPIのプログラムをだいぶ書き直して動かした。

フォルダ内のファイルをスキャンしていくのにFindFirstFileWとFindNextFileWというAPIを使う。
使用する構造体はWIN32_FIND_DATAでなく、WIN32_FIND_DATAWを使う。

ファイル名はANSI版ならヌル文字を終端に入れたchar型の配列でよいのだけど、Unicode版はwchar_t型の配列を使う。

wchar_t配列型の文字列のフォルダ名やファイル名などを加工するのに、strcpyやstrcatが使えないので代わりにwcscpyやwcscatを使った。

文字定数は”foo”などと書く代わりにL”foo”と書いてUnicodeにしておかなければならない。

コマンドラインで動かすプログラムなのだけど、Unicodeを表示させるためにprintfでは駄目なので、printf(“%s”,str)と書くかわりにwprintfを使ってwprintf(L”%ls”,wstr)となどと書く。

cmd.exeから動かすとwprintfの表示が文字化けしてしまう。
コードページを変更するコマンドを使ってもどうもうまくいかない。
cmd.exeを使わずにPowershellで実行するとちゃんとwprintfの表示ができた。

知っている人にはきっと今更な話だが、ずっと自分はANSI版のAPIしか触ってなかったので。


つづく

Swiftでglibcを使うにはどうすればいいだろうか

Swiftでglibcを使うにはどうすればいいだろうか?

SwiftのLinux版(Ubuntu版)というのがあり、Mac版やiOS版みたいなフレームワークのライブラリが無いかわりにglibcを使うことができる。

それなら逆にMac版などでも同じようにglibcを呼び出すことができるのではないだろうか?

しかし、Ubuntu版のSwiftのディレクトリのincludeの中身を探してみたのだが、それっぽいものが見つからなかった。
import Glibcとすれば、ちゃんと使えているのだけど、どこにその仕掛けがあるのだろう?


追記
Ubuntu版のSwiftのlibディレクトリをよく調べたらusr/lib/swift/linux/libswiftGlibc.soというファイルがあった。
さらにそのサブディレクトリのusr/lib/swift/linux/x86_64の中にglibc.modulemapとGlibc.swiftdocとGlibc.swiftmoduleというのがあった。
このライブラリのソースコードとかを調べてみたら何か分かるのかもしれない。


余談だが、emacsにおける新バージョンのglibcとの非互換問題はどうなったのだろう?
Emacsは衰退しました – Qiita

第7回 Center CLR 勉強会に行ってきた

第7回 Center CLR 勉強会に行ってきた。
今回は、会場はMisocaの会議室で開催された。
20170121_105019

内容は、
・XAML(仮)
XAMLの話

・Reference sourceについて
.NET Frameworkのソースコードブラウザ(webアプリ)の話

・Xaramin FormsとAzure Mobile AppsとMobile Center
 Xamarinを使ったアプリとAzureクラウドとの連携の話

・2017年Legacyとどう向き合って行くか
 Visual Studioの古いやつのサポートが切れる話など

LT
・P/Invokeの話
.NET Coreとilasm(CoreCLR)の話 (自分)
続きを読む

Ubuntu上で.NET Coreを使うのだけど、ilasmが使えないないのでCoreCLRをビルドした

Ubuntu上で.NET Coreを使うのだけど、ilasmが使えないないのでCoreCLRをビルドした。

趣味のコンパイラを自作するのにilasmを使ってたが、これを.NET Core/Ubuntuで動かそうと思った。
CIL(MSIL)中間コードを生成するTiny BASICコンパイラを作ってみた

Ubuntuで.NET Core(バージョン1.1)を使う方法は、公式(英語)の手順が出ている。
https://www.microsoft.com/net/core#linuxubuntu
続きを読む

Windows上で.NET CoreのCoreCLRをビルドしてみた

Windows上で.NET CoreのCoreCLRをビルドしてみた。

Windows以外でUbuntu上などでビルドするのは難しくないようだ。
連載:「○○してみた」日記:CoreCLRをビルドしてみた
コンパイラのclangとCMakeというビルドツールがあればすんなりビルドできるようだ。
(ただし、mscorlib.dllが生成できないみたいだが)

Windows上でビルドするのを試してみた。
公式だと英語の情報だけど、以下のドキュメントに方法が書いてある。
Build CoreCLR on Windows
Visual Studio 2015と、CMake、Python、Git、Powershell 3.0以上、が必要だと書いてある。
(あと、testをビルドするには、DotNet Core SDKも必要とある)

自分の場合、
・Visual Studio 2015
・CMake 3.7.1
・Python 2.7.9
・git 2.7.1
・PowerShell 2.0 (Windows7に最初から入っていた物?)
を使った。
環境変数PATHを書き換えて、cmd.exeやPowershellで上記のものをコマンドラインで使えるようにしておく。

ソースコードはgithubから持ってくる。
https://github.com/dotnet/coreclr
続きを読む

makeというビルドツールで、Makefileを書いてソースコードをビルドするのが好きだった

makeというビルドツールで、Makefileを書いてソースコードをビルドするのが好きだった。

ソースコードの更新された部分からその依存関係を自動で調べて更新すべき部分のみをビルドすることができるという賢い仕組みで、非常に便利だ。

最初にPC-98用のTurbo-Cに付属のmakeに触ったのが使い始めだった。
逆にTurbo-Cの統合環境にはどうも馴染めなかった。
EZ Editorや、VZ Editorに慣れてしまって、それ以外のエディタに馴染めなかったからだと思う。

Makefileの書き方は、MS‐DOSを256倍使うための本で覚えた。

MS‐DOSを256倍使うための本〈Vol.3〉(Amazon)
続きを読む

名古屋でVRハッカソンをやるためのUE4 勉強会 1限目に行ってきた

名古屋でVRハッカソンをやるためのUE4 勉強会 1限目に行ってきた。

名古屋ゲーム制作部というゲーム作りの好きな人が集まっている団体の勉強会だ。
活動場所である名古屋総合市場ビルの一室の広いスペースで開催されている。(スペースの名前はフィーバー柳橋)名古屋駅からはすぐ近くだ。
前にOcufes名古屋をやっていた場所だ。

当日というか前日からは名古屋や岐阜では雪が降っており電車のダイヤが乱れている。
JRで20分遅れで名古屋駅に来た。余裕を持って出掛けて良かった。
ちなみに帰りにはJRの西岐阜で不通になり全線が影響を受けて酷いことになっていた。名鉄への振り替え輸送をやっており、JRでは普通のみの変則な少ない本数の電車の運行をしていた。
20170115_112132
続きを読む

Wiiリモコンを使ってBluetoothでI2CのLEDドライバと磁気センサーを制御してみた

メガネ形の簡易AR HMDを作ってみる、という電子工作の回路についての補足を書く。

「方角が見えるARメガネ」の回路のブロック図は、以下のようになっている。
image1

液晶ドライバーのHT16K33は、Adafruitのブレークアウトボードを秋月電子の通販で購入した

磁気センサーのHMC5883Lは、ブレークアウトボードをAmazonで購入した。(いくつか見つかる)

HiLetgo GY-271 HMC5883Lモジュール 電子コンパスモジュール 3軸磁気センサー [並行輸入品](Amazon)
続きを読む

メガネ形の簡易AR HMDを作ってみる (その5 LEDのマトリクス基板の制御ソフトを作った)

メガネ形の簡易AR HMDを作ってみる、という話の続き。

昨日の基板を動かすソフトを作っている。
もうOgaki Mini Maker Faire 2016に持っていく準備をしないといけないのに。

「イ」を表示するテスト。
rimg0003

HELLOという文字列をスクロール表示してみた。
rimg0002

あと、コンパスを使って方角を外周のドットの表示で見えるようにしてみた。
渡り鳥などの動物は、方位が「視える」というのだけど、それに倣ってARで方位が視える眼鏡を作ったということだ。

あと他に、文字列を方位と一緒に動かして見るモードも付けてみた。

英語だけでなく、日本語の表示も試したのだけど、これはうまくいっていない。


Ogaki Mini Maker Faire 2016に参加するので、これも展示用に持っていく予定だ。