約 2,211,534 件
https://w.atwiki.jp/boare/pages/160.html
English 日本語 リリースノート リリース日 2009/11/07 既知のバグ (2009/12/12更新) CLEとBRIの値が正しくvConnectに伝達されない。 音源DBのインストール箇所がデフォルトと違う場合に、音源DBが検出されない。 VSQメタテキストの最後の1行が正しく読み込まれない ラインツールを選んだ状態で、マウスを横方向に移動させずにクリックするとクラッシュする 注意事項 このバージョンでは、Cadencii 2.1.4以前向けに作成したスクリプトおよびパレットツールが動作しなくなる場合があります。動かなくなったスクリプトなどのメンテナンスはサポート掲示板のスクリプト開発支援&投稿用スレッドで受け付けます。 Cadenciiを起動するには、version 2.0以降の.NET Framework Runtimeが必要です。Windows Vistaより新しいOSの場合、OSに.NET Frameworkが予めインストールされているので、改めてインストールする必要はありません。入手先は以下の通りです。 .NET Framework Runtime .NET Framework Developer Center ダウンロード Straight x UTAUの機能を利用するには、Visual C++ ライブラリDLLが必要です。入手先は以下の通りです。 Visual C++ ライブラリDLL Microsoft Visual C++ 2008 再頒布可能パッケージ (x86) 最新バージョンのmonoを用いることで、monoが対応する各種プラットフォーム上でCadenciiを起動することが出来ます。ただし、この場合VOCALOID / VOCALOID2 VSTiを使用する各機能およびサウンド関連の機能は使用できません。monoの入手先は下記の通りです。 mono download ダウンロード Cadencii version 3.0.6 (1170KB) 不具合の修正 以下の不具合を修正しました。 ショートカットキーが設定できない UTAUプロジェクトファイルの読込みが必ず失敗する ソースコードの入手方法 3.0系統のソースコードはSourceForge.JPのCadenciiのSVNリポジトリにあります。SVNリポジトリのチェックアウトは、次を参考に行ってください。 svn checkout -r 643 http //svn.sourceforge.jp/svnroot/cadencii/branches/3.0 ./ 上記のコマンドは、このバージョンのソースコードをチェックアウトする場合のものです。
https://w.atwiki.jp/ohden/pages/720.html
UninstallしたハズのOracle.DataAccessが邪魔をする Windows 7-64bit Pro Oracle Database 11g Oracle Databaseのuninstallを失敗して、uninstallしたハズのdllがGACに残ってて... 後から入れた別の11gのdllが認識されないという現象。(´・ω・`) まぁ、ちゃんとuninstallできてないだけなんですけどね... http //otndnld.oracle.co.jp/document/products/oracle11g/111/windows/E05879-05/deinstall.htm まず、GACってのは、『 Global Assembly Cache 』の略で、『C \Windows\assembly』のことらしい。 アプリケーションがinstallされる際に、DLLがGACに突っ込まれて、他のアプリケーションでも使えるようになるらしい。 今まではversionの差異とか管理できんかったのが、できるようになっとるんですとよ。 で、何をどうしたのかと言うと... Oracle Database 11gが入ってる環境で、『deinstall\deinstall.bat』を実行してアンインストールを試みた。 この時、bat実行に通常権限のコマンドプロンプトを使用。この時、『なんとなくアンインストールできたみたい。』で、他の11gを導入したらしい... するってぇと、前の11gのdllが邪魔して、 ファイルまたはアセンブリ名 ほげほげ 、またはその依存関係の 1 つが読み込めませんでした。見つかったアセンブリのマニフェスト定義はアセンブリ参照に一致しません。 ってエラーが吐かれるようになったらしい。 そこで、対策。 11gをちゃんとuninstallしてまっさらにしよう。 ①管理者権限で実行したコマンドプロンプトから『deinstall\deinstall.bat』を実行する。 管理者権限で実行すればちゃんときれいにuninstallできる。 実行中の質問。データベース名選べってのはそのままEnter押して、実行するよってのは『y』でEnterでOK。 ②GAC『C \Windows\assembly』にある11gがらみのものをuninstallする。 例えば、以下のようなものがあるので、この中から残ってるのがあったらuninstall。 Oracle.DataAccess Oracle.DataAccess.resources Oracle.Database.Extensions Oracle.Web Oracle.Web.resources Policy.2.102.Oracle.DataAccess Policy.2.111.Oracle.DataAccess Policy.2.111.Oracle.Web この、『Policy.…』ってヤツらがversionの管理とかやってるっぽくて... 『Oracle.*』が無くなっても『Policy.*』が残ってると、いつまで経ってもエラーが消えない。 まぁ、手動で消す時に消し忘れたんだね... 関連するのを消し忘れんように、手動で消すときは『公開キー トークン』でsortして、同じ値の項目をチェックするようにすること。 この『公開キー トークン』ってヤツは、ベンダー毎のユニークキーみたいなので『89b483f429c47342』で探せばOracle絡みのものが見つかるハズ。 uninstallをする際、通常の設定だと、右クリックして『アンインストール』を選んでも 『アクセスが拒否されました ほげほげ 』 ってメッセージが出てアンインストール出来ないと思う。 これは、UACが邪魔をしてるからで、UACを切ってあげればuninstallできるようになる。 UACの切り方は、[コントロールパネル]-[ユーザー アカウント]。 ダイアログが開いたら『ユーザー アカウント制御設定の変更』を選択。スライダを一番下に変更する。 この変更はOSを再起動しないと有効にならないので注意。 ここまでやって、再度所望の11gをinstallする。 これで、実行時errorが無くなりました。 同じような問題が出てる人、これで解決しませんかね? ここまでやる必要は無いと思うけど、参考までに... 32bit版と64bit版のODACを共存させたい 更新日: 2015年11月16日 (月) 19時09分48秒 名前 コメント すべてのコメントを見る
https://w.atwiki.jp/gdiplusplus/pages/12.html
注意! このページの情報は古い可能性があります。最新版の情報などは2chスレを各自追いましょう。 FreeTypeを使ったgdi++.dllで更なるフォントの可能性を。 gdi++.dll(FreeType版)について 概要 表示例 利用上の注意 推奨動作環境 使い方、オプション、その他設定 Tips、FAQ gdi++.dll(FreeType版)について 作者 555 ◆qtNrpBmX2. 他多数の小人さんたち 最新安定版 gdi0787バイナリもチェックしてみて下さい。 ソフトウェアの基本的コンセプト 2ちゃんねる Windows板 gdi++.dll quality=5 (199)より オリジナルのGDI++は力強い描画。まさにキュアブラック。 FreeType版はスタイリッシュな描画。まさにキュアウィンディ で、本当に最初期はFreeTypeで描画しない(できないかった)部分をオリジナルの描画コードで 描画することは視野にあった事は告白しておきますが 今のところ私は見送ろうと思っています。 概要 gdi++.dllをベースにさらなる拡張。 元祖gdi++.dllでの方式ではある程度以上の描画品質を得られなかったため、フォントレンダリングをFreeTypeを用いて行うようにしたもの。 表示例 →表示サンプル 利用上の注意 このソフトウェアはまだ開発段階のため、思わぬ不具合が起きる可能性がある。自己責任で使うこと。 バグ報告は2chのスレッドにて行う。その際は発生状況と環境の詳細(使用バージョン、OS、アプリ、使用フォント等)を記入すること。 推奨動作環境 Windows 2000またはXP以降(Vistaやx64版は未確認) 動作クロック周波数が1GHz以上のCPU 512MB以上のメモリ 使い方、オプション、その他設定 →使い方 →オプション →その他 Tips、FAQ →Tips →FAQ
https://w.atwiki.jp/kurushima/pages/96.html
検索でZIP,CABの中の中を検索する/しないの設定 検索させない regsvr32 /u zipfldr.dll regsvr32 /u cabview.dll 検索するように戻す regsvr32 /s zipfldr.dll regsvr32 /s cabview.dll
https://w.atwiki.jp/boare/pages/84.html
English 日本語 Release Note リリース日 2009/03/30 注意事項 このバージョンはCadencii version 1.4リリースに向けたデバッグを行うためのベータ・バージョンです。未確認の不具合が多数含まれている可能性がありますので、実際の作業に使用することはお勧めしません。 使用にはversion 2.0以降の.NET Framework RuntimeおよびVisual C++ ライブラリDLLが必要です。それぞれの入手先は以下の通りです。 .NET Framework Runtime .NET Framework Developer Center ダウンロード Visual C++ ライブラリDLL Microsoft Visual C++ 2008 再頒布可能パッケージ (x86) Download Cadencii version 1.4b1 (408KB) 新機能および仕様等の変更 version 1.4b1での変更 レンダリング結果の音声波形を見られるようにした。 コントロールカーブをコピー/カットする時に、ベジエ曲線もコピーされるようにした。 VsqFileクラスのDisposeメソッドを廃止(スクリプトの安全性確保のため)。 スペースキーを押しながらピアノロール/コントロールカーブ画面をマウスドラッグするとスクロールできるようにした(3ボタンマウスの中ボタンを押す動作に同じ。これに伴い、プレビュー再生を開始するショートカットキーはEnterキーのみとなります)。 「カーブ」モード時のポインターツールの動作を変更。 スクリプトのアセンブリをキャッシュし,2回目以降のスクリプトの起動を高速化した. スクリプトの設定を保存するようにした.(スクリプトを定義したクラス内のstaticかつpublicで,かつ[XmlIgnore]属性が付いていない,フィールドおよびプロパティは自動的に保存されます) ゲームコントローラのボタンアサイン設定を変更できるようにした。 version 1.3.0からversion 1.4a11で実施した変更 アプリケーションアイコンを仮導入(かっこいいアイコン募集中です)。 表示するコントロールカーブを選べるようにした。 VSTiドライバの、DLL読込み部分を変更。 複数トラックの同時再生を(とりあえず)可能にした。 現在選択されているトラックのプレビュー再生方法を、WAVEにレンダリングして再生する方法から、リアルタイムでレンダリングし再生する方法に変更。 ゲームコントローラとの接続方法を、DirectXを使用する方法からwinmmを使用する方法に変更。(これに伴い、DirectXランタイムは起動に必須ではなくなります。) VibratoのRateとDepthを、コントロールカーブ画面で編集できるようにした。 AccentとDecayを、VELと同様にコントロールカーブ画面で編集できるようにした。 繁体中国語用の言語ファイルを追加した。(翻訳者はEjiさんとkankanさんです。ありがとうございました) コントロールカーブの範囲選択時にも、クオンタイズするかどうかを選択できるようにした。 Panpotの設定が反映されるようにした。 Volumeの設定が反映されるようにした。 WAVE出力時のパフォーマンスを改善。 鍵盤押下げ時に用いる音源ファイルの生成機能を、別ツールに分離。 クオンタイズモードに1/128モードを追加. 固定長音符入力のモードに1/128を追加. VOCALOID2 VSTi Pluginを駆動するDLLをnativeのものからc++/CLIに変更。 VOCALOID2 VSTi Realtimeで使用する歌詞ファイル(*.vlf)を出力するスクリプトを同梱(動くかどうかは不明)。 ゲームコントローラを再接続できるようにした。 x86用アセンブリであることを明示してコンパイルするようにした。(これに伴い、64bit環境で起動時にクラッシュする不具合が改善されるはず) ゲームコントローラを使ってリアルタイムに音符を入力できるようにした。 ゲームコントローラ(PS2コントローラを想定)を使って音を出せるようにした。 ツールアイコンを導入。 スクリプトの呼び出し仕様を変更した。 不具合の修正 version 1.4b1での変更 プレビュー再生中に、レンダリングを開始できてしまう不具合を修正。 version 1.3.0からversion 1.4a11で実施した変更 Cadencii上で追加したトラックのコントロールカーブ画面の描画に必ず失敗し、クラッシュする不具合を修正。 「ジョブ」- 「小節の削除」および「小節の挿入」コマンドで、ベジエ曲線が正しくトリムされない不具合を修正。 ウィンドウサイズを小さくした場合、コントロールカーブ部分の表示が壊れる場合がある不具合を修正。 プレビュー再生時に、再生開始してから3秒以内にレンダリングが完了する場合に、正常にプレビューできない不具合を修正。 コントロールカーブ名の一覧が枠からはみ出る不具合を修正。 トラックの追加/削除を「元に戻す」または「やり直し」するとクラッシュする不具合を修正。 WAVEファイルへのレンダリング時に、曲の末尾部分数秒がレンダリングされずに途切れてしまう不具合を修正。 歌手を変更しても、強制的に再レンダリングしない限り、歌手変更が試聴結果に反映されない不具合を修正。 コントロールカーブの、データ点が無い部分をコピーし、ペーストするとクラッシュする不具合を修正。 「全てを選択」した場合、曲先頭の歌手変更イベントがコピーされてしまう不具合を修正。 ユーザー辞書を利用して歌詞を打ち込んだ場合、変換された発音記号列の先頭にタブ文字が挿入されてしまう場合がある不具合を修正。 歌詞入力時に、Tabキーを押さない限り入力内容が反映されない不具合を修正。 歌手変更トラック上の何も無いところを「消しゴム」モードでクリックするとクラッシュする不具合を修正. トラック先頭の歌手変更イベントを削除できてしまう不具合を修正. スクリプトの実行後に画面の表示が更新されない不具合を修正. スクリプトの実行結果のRedo/Undoが出来ない不具合を修正. 音符の先頭が左端に隠れている場合,ビブラートの範囲をマウスドラッグで編集できない不具合を修正. ビブラート範囲をマウスドラッグで編集する時,パーセンテージの表示が更新されない不具合を修正. 使用中のゲームコントローラを取り外すと必ずクラッシュする不具合を修正。 音符の表情ダイアログまたはビブラートダイアログをダブルクリックした直後にプレビューが必ず鳴る不具合を修正. ひらがな等を発音記号に変換する辞書がデフォルトでオフになってしまう不具合を修正。 How to get source codes 現在リポジトリが2つに分かれております。Cadenciiの次のコンポーネントはSourceForge.JPのLipSyncのCVSリポジトリにあります。 Boare.Lib.AppUtil Boare.Lib.Media Boare.Lib.Vsq bocoree また、次のコンポーネントはSourceForge.JPのCadenciiのSVNリポジトリにあります。 Cadencii vstidrv3 GenerateKeySound SourceForge.JPのリポジトリのチェックアウトは、次を参考に行ってください。パスワードが求められた場合は、単にエンターキーを押してください。 cvs -d pserver anonymous@cvs.sourceforge.jp /cvsroot/lipsync login cvs -z3 -d pserver anonymous@cvs.sourceforge.jp /cvsroot/lipsync co -r CADENCII_1_4_B_1 Boare.Lib.AppUtil cvs -z3 -d pserver anonymous@cvs.sourceforge.jp /cvsroot/lipsync co -r CADENCII_1_4_B_1 Boare.Lib.Media cvs -z3 -d pserver anonymous@cvs.sourceforge.jp /cvsroot/lipsync co -r CADENCII_1_4_B_1 Boare.Lib.Vsq cvs -z3 -d pserver anonymous@cvs.sourceforge.jp /cvsroot/lipsync co -r CADENCII_1_4_B_1 bocoree google codesのリポジトリのチェックアウトは、次を参考に行ってください。 svn checkout -r 51 http //svn.sourceforge.jp/svnroot/cadencii/trunk ./ 上記のコマンドは、このバージョンのソースコードをチェックアウトする場合のものです。最新のソースコードをチェックアウトしたい場合は、いずれも「-r」オプションを省いて入力する必要があります。
https://w.atwiki.jp/dolac/pages/5.html
インストール 必要なもの 大航海時代オンライン さすがにあるよね? Perl ActiveStateあたりからダウンロードしてください。 構成ファイル DOLAC.DLL 低レベル関数(DLL実装Perlライブラリ)本体 DOLAC.pm 低レベル関数(DLL実装Perlライブラリ)モジュール定義 DOLAC.pl 高レベル関数ライブラリ binフォルダ ツール群 bmpフォルダ 画像認識用のビットマップ wayフォルダ 移動用のウェイポイント
https://w.atwiki.jp/pluginanalogsimulate/
ハードウェアエフェクターをエミュレートしたDAW用プラグインを、その実機別に一覧にしてみた。 他にこーいうサイト無さげなので。 気が向いたとき、思いつくままに追加・編集してるので、 アルファベット順とかEQ・コンプ別とかそこまではしてない。 また各プラグインメーカー独自のパラメータを追加してたり、 他のエフェクターと合体させてたりするので、どれだけ実機に忠実かまでは知らん。 今んとこVSTプラグインの情報から作成。RTASとかわからん。 Focusrite LIQUID MIXは反則気味。 合計: - 今日: - 昨日: - トップページの合計: - 09/10/18 TUBE-TECH、Pultec追加 09/09/17 ネタ切れ。誰か他に知んね? 2chのVSTスレにでも。
https://w.atwiki.jp/boatassist/pages/19.html
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; public class NetWorkUtil { #region プロパティ private static Guid GUID_DEVCLASS_NET = new Guid(0x4d36e972, 0xe325, 0x11ce, 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18); private const int DIGCF_PRESENT = 2; private const int DIF_PROPERTYCHANGE = 0x00000012; private const int DICS_FLAG_GLOBAL = 0x00000001; private const int INVALID_HANDLE_VALUE = -1; private const int DICS_ENABLE = 0x00000001; private const int DICS_DISABLE = 0x00000002; private const int DICS_FLAG_CONFIGSPECIFIC = 0x00000002; [StructLayout(LayoutKind.Sequential)] private struct SP_DEVINFO_DATA { public int cbSize; public Guid ClassGuid; public int DevInst; public int Reserved; } [StructLayout(LayoutKind.Sequential)] private struct SP_CLASSINSTALL_HEADER { public int cbSize; public int InstallFunction; } [StructLayout(LayoutKind.Sequential)] private struct SP_PROPCHANGE_PARAMS { public SP_CLASSINSTALL_HEADER ClassInstallHeader; public int StateChange; public int Scope; public int HwProfile; public void Init() { ClassInstallHeader = new SP_CLASSINSTALL_HEADER(); } } #endregion #region SetUp API [DllImport("setupapi.dll")] private static extern IntPtr SetupDiGetClassDevs(ref Guid ClassGuid, IntPtr Enumerator, IntPtr hWndParent, int Flags); [DllImport("setupapi.dll")] private static extern bool SetupDiEnumDeviceInfo(IntPtr DeviceInfoSet, int Supplies, ref SP_DEVINFO_DATA DeviceInfoData); [DllImport("setupapi.dll")] private static extern bool SetupDiDestroyDeviceInfoList(IntPtr DeviceInfoSet); [DllImport("setupapi.dll")] private static extern bool SetupDiSetClassInstallParams(IntPtr DeviceInfoSet, ref SP_DEVINFO_DATA DeviceInfoData, ref SP_CLASSINSTALL_HEADER ClassInstallParams, int ClassInstallParamsSize); [DllImport("setupapi.dll")] private static extern bool SetupDiCallClassInstaller(int InstallFunction, IntPtr DeviceInfoSet, ref SP_DEVINFO_DATA DeviceInfoData); #endregion private static IntPtr hDevInfo = (IntPtr)0; private static bool StateChange(int NewState, int SelectedItem, IntPtr hDevInfo) { SP_PROPCHANGE_PARAMS PropChangeParams; SP_DEVINFO_DATA DeviceInfoData; PropChangeParams = new SP_PROPCHANGE_PARAMS(); PropChangeParams.Init(); DeviceInfoData = new SP_DEVINFO_DATA(); PropChangeParams.ClassInstallHeader.cbSize = Marshal.SizeOf(PropChangeParams.ClassInstallHeader); DeviceInfoData.cbSize = Marshal.SizeOf(DeviceInfoData); if (!SetupDiEnumDeviceInfo(hDevInfo, SelectedItem, ref DeviceInfoData)) return false; PropChangeParams.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE; PropChangeParams.Scope = DICS_FLAG_GLOBAL; PropChangeParams.StateChange = NewState; if (!SetupDiSetClassInstallParams(hDevInfo, ref DeviceInfoData, ref PropChangeParams.ClassInstallHeader, Marshal.SizeOf(PropChangeParams))) return false; if (!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo, ref DeviceInfoData)) return false; PropChangeParams.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE; PropChangeParams.Scope = DICS_FLAG_CONFIGSPECIFIC; PropChangeParams.StateChange = NewState; if (!SetupDiSetClassInstallParams(hDevInfo, ref DeviceInfoData, ref PropChangeParams.ClassInstallHeader, Marshal.SizeOf(PropChangeParams))) return false; if (!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo, ref DeviceInfoData)) return false; return true; } /// summary /// ネットワークを無効にします。 /// /summary /// returns bool 処理の成否 /returns public static bool DisableNetAdapter() { IntPtr hdi; bool res = true; hdi = SetupDiGetClassDevs(ref GUID_DEVCLASS_NET, (IntPtr)0, (IntPtr)0, DIGCF_PRESENT); if (hdi == (IntPtr)INVALID_HANDLE_VALUE) return false; res = StateChange(DICS_DISABLE, 0, hdi); SetupDiDestroyDeviceInfoList(hdi); System.Threading.Thread.Sleep(500); return res; } /// summary /// para ネットワーク接続を有効にします /para /// /summary /// returns bool 処理の成否 /returns public static bool EnableNetAdapter() { IntPtr hdi; Boolean res = true; hdi = SetupDiGetClassDevs(ref GUID_DEVCLASS_NET, (IntPtr)0, (IntPtr)0, DIGCF_PRESENT); if (hdi == (IntPtr)INVALID_HANDLE_VALUE) return false; res = StateChange(DICS_ENABLE, 0, hdi); SetupDiDestroyDeviceInfoList(hdi); System.Threading.Thread.Sleep(500); return res; } }
https://w.atwiki.jp/shiori_yuhna-se/pages/15.html
結奈たんの秘密 Second Edition (嘘)に図説あり。 ・さおり使用方法 最終的には、さおりのDLLファイルを入れるだけで認識する予定ですが、今のところは・・・ ghost\masterフォルダに、「saori.txt」を作る。 1行ごとに、「(ID),(DLLファイル名),(staticまたはdynamic)」の書式でDLLファイルを書く。 staticだと結奈起動時にロード、dynamicだとさおりを呼び出す度にロードします。 (例) saori.txtに「music,mciaudio.dll,static」 と書いて、トークに 「$saori[music,load,KOUMM00.MID]$saori[music,play]再生するよ。」 とかくと、音楽が再生されます。 さおりは、以下のページにリストがあります。ここからダウンロード可能。 http //members.jcom.home.ne.jp/umeici/saoricollect.html ・さおりの使用方法、追加 $saori[(なんとかかんとか)]を実行すると、このスクリプトは さおりから帰ってきた文字(Result)に置き換えられます。 他の文字(Value[n])は、{@value0}とか{@value1}とかで表示されます。 変数扱いなので、{a=@value0}と言う風にaに入れる事も出来ます。 【本家掲示板No.0001「YUHNA-SE Unit 1 補足」より】 基本的なコト
https://w.atwiki.jp/abwiki/pages/58.html
UTF82SJIS http //blog.goo.ne.jp/xmldtp/e/7eaeeb3dabfe975dbc57f73aefb1c059からコピペ #N88BASIC Function utf8ToSjis(utf8 As *Byte) As *Byte Dim utf16 As *Word Dim wlen As Long Dim sjis As *Byte utf8ToSjis = NULL If utf8 = NULL Then Exit Function End If ============================== UTF8=>UTF16変換 ============================== まずは、wlenの長さをとる wlen = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0) If wlen = 0 Then Exit Function End If utf16の領域確保 utf16 = calloc(wlen + 1) If utf16 = NULL Then Exit Function End If utf16変換 If MultiByteToWideChar(CP_UTF8, 0, utf8, -1, utf16, wlen) = 0 Then free(utf16) Exit Function End If ============================== UTF16=>ShiftJIS変換 ============================== まずは、長さを取得 Dim mlen As Long mlen = WideCharToMultiByte(CP_ACP,0,utf16,-1,NULL,0," ",NULL) If mlen = 0 Then free(utf16) Exit Function End If 領域確保 sjis = calloc(mlen + 1) If sjis = NULL Then free(utf16) Exit Function End If utf16変換 If WideCharToMultiByte(CP_ACP,0,utf16,-1,sjis,mlen," ",NULL) = 0 Then free(utf16) free(sjis) Exit Function End If free(utf16) utf8ToSjis = sjis End Function Dim utf8[1000] As Byte Dim sjis As *Byte Dim hF As HANDLE Dim r As DWord hF = CreateFile("utf8.txt", GENERIC_READ,0,ByVal 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0) ReadFile(hF, utf8,1000, Varptr(r),ByVal 0) sjis = utf8ToSjis(utf8) Print MakeStr(sjis) CloseHandle(hF) free(sjis) Input sjis WinAPIを使うべき処理 ShiftJIS→Unicode(UCS-2)変換 MultiByteToWideChar関数を使う。 MultiByteToWideChar(外部ページ) に詳しい。誰かコピーして。 Unicode(UCS-2)→ShiftJIS変換 WideCharToMultiByte関数を使う。 WideCharToMultiByte(外部ページ) に詳しい。誰かコピーして。 WinAPIを使わなくてもプログラム側で簡単に変換できるもの ShiftJIS→EUC-JP変換 ShiftJISとEUC-JPはエンコードが違うだけで同じ符号体系を用いている。その為、この変換は比較的容易い。 Sub SJIS2EUCJP(src As *Byte,dst As *Byte) Dim is=0 As Long,id=0 As Long Do If src[is]=0 then dst[id]=0 Exit Do Else If src[is] H80 then dst[id]=src[is] is++ id++ Else If ( HA1 =src[is]) And (src[is] = HDF) then dst[id]= H8E dst[id+1]=src[is] is++ id+=2 Else Dim a As Long,b As Long b=src[is+1]- H3F If b=0 then dst[id]=0 Exit Do End If If b 63 then b-- a=src[is]*2- H101 If a 62 then a-=128 If b 94 then b-=94 a++ End If If (a 1) Or (94 a) Or (b 1) Or (94 b) then dst[id]=0 Exit Do End If dst[id]=a+ HA0 dst[id+1]=b+ HA0 is+=2 id+=2 End If Loop End Sub EUC-JP→ShiftJIS変換 Sub EUCJP2SJIS(src As *Byte,dst As *Byte) Dim is=0 As Long,id=0 As Long Do If src[is]=0 then dst[id]=0 Exit Do Else If src[is] H80 then dst[id]=src[is] is++ id++ Else If src[is]= H8E then dst[id]=src[is+1] is+=2 id++ Else If src[is]= H8F then JIS X 0212-1990文字集合だが、Shift-JISには無いため?で代用する。 dst[id]=Asc("?") is+=3 id++ Else Dim a As Long,b As Long a=src[is]- HA0 b=src[is+1]- HA0 If (a 1) Or (94 a) Or (b 1) Or (94 b) then dst[id]=0 Exit Do End If a-- If a and 1 then a-- b+=94 End If a=(a 1)+ H81 If b 63 then b++ If a H9F then a+=64 dst[id]=a dst[id+1]=b+ H3F is+=2 id+=2 End If Loop End Sub Unicode(UCS-2)→Unicode(UTF-8)変換 UCS-2とUTF-8はエンコードが違うだけで同じ符号体系を用いている。その為、この変換は比較的容易い。 Sub UCS22UTF8(src As *Byte,dst As *Byte) Dim is=2 As Long,id=0 As Long Dim fBE As Long If (src[0]= HFF) and (src[1]= HFE) then BOM fBE=0 Else If (src[0]= HFE) and (src[1]= HFF) then fBE=1 Else default=Big Endian(RFC 2781) fBE=1 is-=2 End If Do If src[is]=0 And src[is+1]=0 then dst[id]=0 Exit Do Else Dim c As Long c=src[is+(1-fBE)] As Long*256+src[is+fBE] If c H80 then dst[id]=c id++ Else If c H800 then dst[id]= HC0 Or (c 6) dst[id+1]= H80 Or (c and H3F) id+=2 Else If c H10000 then dst[id]= HE0 Or (c 12) dst[id+1]= H80 Or ((c 6) and H3F) dst[id+2]= H80 Or (c and H3F) id+=3 Else dst[id]=0 Exit Do End If is+=2 End If Loop End Sub Unicode(UTF-8)→Unicode(UCS-2) Sub UTF82UCS2(src As *Byte,dst As *Byte) Dim is=0 As Long,id=2 As Long If (src[0]= HEF) And (src[1]= HBB) And (src[2]= HBF) then is+=3 dst[0]= HFE dst[1]= HFF Do If src[is]=0 then dst[id]=0 Exit Do Else Dim c As Long If src[is] H80 then c=src[is] is++ Else If src[is] HE0 then If src[is+1]=0 then dst[id]=0 Exit Do Else c=((src[is] And H1F) 6) Or (src[is+1] And H3F) is+=2 End If Else If src[is] HF0 then If src[is+1]=0 then dst[id]=0 Exit Do Else If src[is+2]=0 then dst[id]=0 Exit Do Else c=((src[is] And H0F) 12) Or ((src[is+1] And H3F) 6) Or (src[is+2] And H3F) is+=3 End If Else If src[is] HF8 then If src[is+1]=0 then dst[id]=0 Exit Do Else If src[is+2]=0 then dst[id]=0 Exit Do Else If src[is+3]=0 then dst[id]=0 Exit Do Else c=((src[is] And H03) 18) Or ((src[is+1] And H3F) 12) Or ((src[is+2] And H3F) 6) Or (src[is+3] And H3F) is+=4 End If Else dst[id]=0 Exit Do End If If c H10000 then UCS2には拡張領域が無いため表現できない。 dst[id]=0 dst[id+1]=Asc("?") id+=2 Else dst[id]=c 8 dst[id+1]=c And HFF id+=2 End If End If Loop End Sub nkf32を使って nkf32は文字コードの各種変換を行う便利ライブラリ。 DLLとして提供されていて、使い易くなってる。 ABも実はこれを使っている。SubOperationフォルダーを参照。 使い方は結構簡単で、例えば次のようにするだけで、何らかの文字コードのファイルをEUCに変換してくれる。 #N88BASIC'宣言Declare Sub GetNkfVersion Lib "Nkf32.dll" (verStr As *Byte)Declare Function SetNkfOption Lib "Nkf32.dll" (optStr As *Byte) As LongDeclare Sub NkfConvert Lib "Nkf32.dll" (outStr As *Byte, inStr As *Byte)Declare Sub ToHankaku Lib "Nkf32.dll" (inStr As *Byte)Declare Sub ToZenkakuKana Lib "Nkf32.dll" (outStr As *Byte, inStr As *Byte)Declare Sub ToMime Lib "Nkf32.dll" Alias "EncodeSubject" (outStr As *Byte, inStr As *Byte)Declare Sub EncodeSubject Lib "Nkf32.dll" (outStr As *Byte, inStr As *Byte)Dim vstr[478] As ByteDim in As *ByteDim out As *ByteDim size As DWordGetNkfVersion(vstr)Print "nkf32のバージョン→" MakeStr(vstr)in = LoadFile(VarPtr(size))If in And size Then Print "読み取りOK" Else EndIf SetNkfOption("-e") = 0 Then Print "EUCに変換します"out = calloc(size+1)NkfConvert(out, in)SaveFile(out, lstrlen(out))Print "おわり"End'ファイルを開いて中身を返すFunction LoadFile(sss As *Long) As *ByteDim ofn As OPENFILENAMEDim buffer[333] As Byteofn.lStructSize=SizeOf(OPENFILENAME)ofn.hwndOwner=GetActiveWindow()ofn.lpstrFilter=Ex"テキスト ファイル(*.txt)\0*.txt\0すべてのファイル(*.*)\0*\0"ofn.nFilterIndex=1ofn.lpstrFile=bufferofn.nMaxFile=333ofn.lpstrTitle="ファイルを開く"ofn.Flags=OFN_FILEMUSTEXIST or OFN_PATHMUSTEXISTIf GetOpenFileName(ofn)=0 Then Exit Function'OpenDim hF As HANDLEDim r As DwordDim x As *BytehF = CreateFile( buffer, GENERIC_READ, 0, ByVal 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)SetDWord(sss, GetFileSize(hF, 0))x = calloc(GetDword(sss)+1)ReadFile(hF, x, GetDword(sss), sss, ByVal 0)CloseHandle(hF)LoadFile = xEnd Function'oooの内容を保存Function SaveFile(ooo As *Byte, sss As Long) As LongDim ofn As OPENFILENAMEDim buffer[333] As Byteofn.lStructSize=SizeOf(OPENFILENAME)ofn.hwndOwner=GetActiveWindow()ofn.lpstrFilter=Ex"テキスト ファイル(*.txt)\0*.txt\0すべてのファイル(*.*)\0*\0"ofn.nFilterIndex=1ofn.lpstrFile=bufferofn.nMaxFile=333ofn.lpstrTitle="ファイルを保存"ofn.Flags=OFN_FILEMUSTEXIST or OFN_PATHMUSTEXISTIf GetSaveFileName(ofn)=0 Then Exit Function'OpenDim hF As HANDLEDim w As DwordhF = CreateFile(buffer, GENERIC_WRITE, 0, ByVal 0, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0)WriteFile(hF, ooo, sss, VarPtr(w), ByVal 0)CloseHandle(hF)SaveFile = 44End Function