UNICODE文字はDLLから吐けないのでしょうかtok - 2014/03/25(火) 12:48 No.2574
|
はじめまして。友人に頼まれDLLを作成している者です。 表題のことに関しまして質問させていただきます。
DLL側で用意する関数は
extern "C" __declspec(dllexport) void Function(const char* Input, char* Output)
となっていますが、Outputにwchar_t*を渡すことは出来ないのでしょうか。 UNICODE文字(ハートマーク等)を含んだ文字列をチャット画面に吐き出したいのですが、その場合wchar_t*を渡さないといけないと思います。
この辺りのご事情ご存知の方いらっしゃいましたら どうかご教授願えましたら幸いです。
|
tok - 2014/05/05(月) 00:06 No.2583
|
大分前に自己解決(?)しました。フィードバックとして書き込みます。
まず私の言った wchar_t* というのは見当違いで、これは私が内部的に使っているUTF-16での話でした。UTF-8は char* で良いのです。
そしてUTF-8を送信することはやめにしました。 というのはLimeChatの初期設定がUTF-8ではありませんから、それらを表示させるにはユーザ側に設定を変えてもらわないといけません。 これは可用性に欠けます。 そしてその機能は作っているDLLに必要不可欠ではありませんからこの処理は作らないことにしました。
他はすべてうまく行きました。
続いてBBSで検索しても見つからず自己解決した問題を書きます。
■ DllHook で利用するDLLの書き方 マクロの設定で「動作」を DllHook にした場合、「動作の情報」の所に入れる文字列はDLL内の「関数名」に対応します。 1つのDLLに複数の機能を持たせる場合は、プロトタイプ宣言で提示される引数(TrailやSenderAddress等)を持った別名の関数をたくさん作り、「動作の情報」でそれを指定すれば1つのDLLで複数の機能を持たせることが可能です。
■ 32bitビルドと64bitビルド 32bit版のLimeChat用のDLLを制作する場合はDLLも32bit版である必要があります。 64bit版のLimeChat用のDLLを制作する場合はDLLも64bit版である必要があります。
これを違えた場合、DLLは何も動作せずそのまま終了します。 例を出しますとRoart様制作の「ろあダイス」に添付されているDLLは32bit版ですから64bit版LimeChatでは動作しません。添付されているソースを利用させていただき、64bit版DLLを新たにビルドする必要があります。 (この辺はプログラム普段からいじってる方には今更情報ですが、Win7でx64を初体験している方も多かろうということで...)
※例外として、.NETを使うDLLであれば対象CPUをAnyCPUにすることで32bit/64bit両対応のDLLが作成出来るようです。私は過去に.NETを使ったプログラムを作りリアルタイム性の限界(GC利用による定期スワップで一瞬画面が止まる。ゲーム制作に適さない)を感じたためそれ以来GCという存在ごと大嫌いになり使っておりませんから、実際の動作がどうかはわかりません。
■ 複数行のメッセージを送る場合 ヘルプに「また、返値をCR LFのシーケンスで区切ることで、複数のメッセージを一度に送れます。」 とありますがこれは \r\n の後にそのまま返す文字列を続けて良いという意味ではありません。 例えばNOTICEメッセージを複数行表示させる場合には、都度Noticeから始まる命令語を入れなければエラーになります。
即ち 「\r\n」 を 「\r\nNotice #channel :」に置き換える必要があります。
ドキュメントの「複数のメッセージ」は「複数行のメッセージ」ではなく「複数種のメッセージ」と読み替えないといけない、ということです。
以上です。 どなたかのお役に立てれば幸いです。
|
|