MS-Windows

Python: win32com を使ってDBにADO接続してみる。

Python and ActiveX Data Objects (ADO)を参考にMS AccessのMDBにアクセスしてみました。 使用しているMDBは「Win32OLE 活用法 【第 3 回】 ADODB」のsample1.mdbです。 # -*- coding: cp932 -*- import win32com.client import sys import codecs # 参考 # …

wxHaskell で IME を制御する。(WIN32API)

最初、wxHaskell で HWND を取得する方法が分からず、WIN32APIを呼ぼうとしましたが、うまくいきませんでした。wxHaskell で HWND をとる方法を見つけてwxHaskell で出来るのを知りました。 ボタンを押すたびにIMEのオン、オフ状態が切り替わります。「英数…

Haskellで副作用を起こす(Win32 API によるUTF-16 ⇔ Shift-JIS 変換)

タイトルは釣りです。副作用を起こしているのはHaskellから読んでいるCのライブラリです。 Win32 APIのWideCharToMultiByte、MultiByteToWideCharでUTF-16 ⇔ Shift-JIS 変換を行うには変換結果を格納するバッファを確保してそのポインタを引数に渡し、そのバ…

peekCStringでHaskell文字列を作った後はC文字列が書き換えられてもHaskell文字列に影響はない

shiftJisからUtf16、Utf16からshiftJisへの変換では、変換した後にpeekCString、peekCWString関数によってC文字列からHaskell文字列を作ります。C文字列はHaskell文字列返す前にメモリを解放しているのですが、ふとポインタで指している領域が消えると返す値…

Win32 API の WideCharToMultiByteを使って UTF-16 ⇔ Shift-JIS 変換する。

UTF-16 ⇔ Shift-JIS の変換は計算によって行うことが出来ません。 そこで Win32 APIのMultiByteToWideChar、WideCharToMultiByteを使って変換します。 shiftJisToUtf16 Haskell 文字列をWindowsワイド文字列に変換したあとにワイド文字列からpeekCWStringでH…

Haskellで文字列を UTF-32 ⇔UTF-16 変換する。

IBM developerWorks:Unicodeエンコード方式 UTF-8、UTF-16、およびUTF-32間の相互運用方法を参考にUTF-32 ⇔UTF-16変換関数を作ってみました。 Windows COMの内部文字コードはUTF-16を使っています。 一方、HaskellはソースコードはUTF-8で書きますが内部では…

Haskell でSJIS文字列に変換したときのバイト数を得る。

Haskell でSJIS文字列に変換したときのバイト数を得る。 ターミナルに表を表示するときには固定幅フォントを使いますが、アルファベット、半角カナの混じった日本語を使って表を表示すると表が乱れてしまいます。 幅が半角フォントは全角フォントの半分です…

COM を学ぶ(11) : HaskellでExcel(ワイド文字列バージョン)

Haskell から COM を呼ぶ場合 HaskellからSJISに変換した後に MultiByteToWideChar、 WideCharToMultiByteを使用していましたが、Haskell はUcs4、COMはUTF16を使っていますので、日本語で使う分には文字コードを変換する必要はありません。 SysAllocString …

char wchar_t BSTR 文字変換テスト

Haskell から COM を呼ぶ場合 HaskellからSJISに変換した後に MultiByteToWideChar、 WideCharToMultiByteを使用していましたが、Haskell はUcs4、COMはUTF16を使っていて、日本語で使う分には文字コードを変換しなくても良いはずです。 そこで、WideCharToM…

COM を学ぶ(10) : SysAllocString を使って BSTR を作る。

Haskell から COM を呼ぶ ために MultiByteToWideCharを使わないでSysAllocStringで行うためのテストです。 SysAllocString で BSTR を作りますが、SysAllocStringはバイナリの文字列長を含まないワイド文字列の先頭アドレスを返します。読み取るときはCWStr…

PostScript で 機種依存文字でも文字化けのないPDFを作る(Windows限定)。

今までは以下の理由でEUC-JPのフォントを使ってきました。 Shift-JIS は0x5cを含む文字が文字化けを起こす。 UTF-8 はデフォルトでインストールされていないこともある。 日本語文字列出力を参考に、EUC-JPでテキストを作り、/Ryumin-Light-EUC-H のように E…

ps2pdf で Windows TrueTypeフォントを使う。(PostScript )

Cygwin + Ghostscrpit + Windows TrueTypeフォントに Ghostscrpit で Windows TrueTypeフォントを使う方法が掲載されていました。 GhostscrpitはC:\Program Files\gs\gs9.06\lib\cidfmap に記載されているフォント使いますので、ここにフォントを追加します…

wxHaskell での「応答なし」を回避する。(Haskell によるメッセージ処理)

Haskell によるメッセージ処理 以前の「wxHaskell での「応答なし」を回避する」はメッセージ処理をCでやっていましたが、Esa Ilari Vuokko氏製のDirectXバインディングを使ってみるを参考にHaskellでメッセージ処理をします。 -- ghc --make Main.hs -o msg…

クリップボード内のWindows Path文字列をUNIX Path文字列に変更する(Haskell)。

mintty の中でエクスプローラに表示されたパスをコピーして、そのパスに移動したいときがあります。 しかし、コピーして貼付けると表示されるのは "C:\HaskellPlatform\Clipboard-2.2.0\dist"のような文字列で、そのままでは CD コマンドなどには使えません…

Haskell から MultiByteToWideChar を呼び ShiftJIS←→UTF16 変換する

Windows のターミナルでは SJIS の文字以外は文字化けすることから、Windows で Haskellを使う場合は常にSJISへの変換が必要になります。 Windowsは内部ではユニコード(UTF16)が使われています。ユーザが実際に触れるのは ShiftJIS ですから、Windowsはには…

Cinnamon で半角カナを全角カナに変換したくない場合は直接 nkf を呼び出す。

Windows環境でHaskell を使っています。文字コード変換にはCinnamonを重宝に使っています。 Cinnamonは内部で nkf を使用しています。半角カナを変換しないでそのままにするには nkf のオプションに x を含めなければならないのですが、Cinnamonでは指定され…

Haskell で PostgreSQL のドライバを書く

Haskell で PostgreSQL のドライバを書いてみました。C を使わないでも出来ました。 参考にしたところ PostgreSQL 文書 / IV. クライアントインタフェース / 第 31章libpq - C ライブラリ PostgreSQLで作るLinuxデータベース(3)PostgreSQLをプログラムで操…

Haskell で SQL Server へ ODBC接続

【データ ソース (ODBC)作成】 「コントロール パネル\システムとメンテナンス\管理ツール」から「データ ソース (ODBC)」を開きます。 システムDSN のタブを開き「追加」で「SQL Server」を選択。 「名前」(サンプルでは「DSN=DSNname;」)を入力し、「サ…

Haskell から wxWidgets(C++) 経由で Excel を操作する。

このプログラムは"日本語.xls"のファイルを読み書きするものです。 文字列は newCWString でワイド文字列に変換します。 さらに C++ で wxString に変換しています。 今回サポートしているVariant型は文字列、LongのVariant型です。 {-# LANGUAGE ForeignFun…

Haskell から wxWidgets(C++) を呼ぶ

wxWidgetsには wxHaskell に使用されているGUI以外にも wxString、wxVariant など有用なライブラリがあります。 Haskell から wxWidgets の wxAutomationObject で COM を操作してみます。 (以下は wxWidgets がインストールされた環境を前提としています。…

Windows 環境にて Haskell から PostgreSQL を扱う

Real World Haskell:21 データベース操作を参考に PostgreSQL をテストしてみました。 PostgreSQL の最新バージョンは 9.0.1 ですが、そのままでは connectPostgreSQL を実行した時点で krb5_32.dll がないと言われます。ファイルの中味を確認すると9.0.1-1…

MS-WIndows 環境での Haskell の文字コード

日本語を含んだHaskellのソースコードは UTF8 で記述しますがコンパイルされた文字列はHaskellの内部コード UCS4 に変換されます。 Windows システムとの文字列のやり取りは UCS4 から SJIS に変換して書き込み、受信した文字列はSJISからUCS4に変換します。…

フォームを閉じるとき終了確認をする(wxHaskell)

フォームを閉じるときにダイアログで終了の確認をします。 -- ghc --make Main.hs -o confirm.exe module Main where -- ライブラリを学習するためになるべく丁寧に依存先を書きました。 import Graphics.UI.WX (start) import Graphics.UI.WX.Events (on, c…

wxHaskell での「応答なし」を回避する。

重い処理をしながら textCtrl に記入しようとすると、Windows のイベントループが回らなくなって(応答なし)になってしまい、処理が終了すると一括して表示されてしまうという不具合が起きました。 重い処理をしながら結果をtextCtrl に記入したいのですが…

COM を学ぶ(6) : C言語でExcel を操作する(Mingw)

C++ を Haskell から呼ぶのが大変だというのが分ったので、Ruby の win32ole.c を参考にC言語で Excel を操作する関数を書いてみました。 これらの関数を Haskell から呼べば HaskellでExcel を操作出来ます(^^)/ C++ ではシートから行・列を指定してCellsオ…

wxWidgets の wxAutomationObject で Excel を操作する。

MinGWはGNU ツールチェーンのWindows移植版でWindows APIのためのヘッダファイルがありGCC で Windowsアプリケーションの開発することができます。 wxWidgetsはWindowsを初めMac OS X、Linuxなど多くのOSで動かすことが出来るウィジェット・ツールキットです…

SBCL(Steel Bank Common Lisp)でコンパイルしてみる。

WIndowsからLispでCOMを使いたい思い調べましたところ、Steel Bank Common Lispが良さそうなのでインストールしてみました。 SBCLについては紫藤のWiki:SBCL(Steel Bank Common Lisp)に詳しい紹介があります。LISP で win32ole を使いたい訳です。 Common Li…

wxHaskell をインストールする

「Real World Haskell」は Gtk2hs を紹介していますが wxHaskell は移植性が高く、ネイティブAPIを呼んでいますから綺麗で、パーツも豊富そうです。 wxWidgets については「wxWidgets でクロスプラットフォーム GUIアプリを作ろう」に詳しく記述されています…

Haskell で SJIS 文字列

Haskell のソースコードにUTF8以外の日本語を記入するとコンパイル時にエラーになります。(コメントはOK) UTF8の日本語を出力するときも、そのままでは出力できず、 utf8-string パッケージをインストールして System.IO.UTF8のputStrLnなどを使用しなけれ…

FFI を学ぶ(3) : 自前のCで書いたCOM で MS-Access、SQL server にアクセスする。

小さいMDBですが、10000回連続読み込みでもOKでした。 XP では正常に動作するが、VISTAではSEGV になった。 XP ではmalloc して LSICD の値を保持しているので ((IDispatch *)pDisp)->lpVtbl->Release( (void *)pDisp) で開放したあと free(pDisp) していた…