2007年12月22日土曜日

Control.Invoke / InvokeThrough について

先日 IP*Works! SSH V8 .NET Edition で .NET CF 用のちょっとしたコードを書いてみたら、あるイベント処理内でテキストボックスにデータを表示しようとしたところ例外が発生し "External application error: Control.Invoke must be used to interact with controls created on a separate thread." と表示されました。

別のイベント処理では問題なかったのでちょっと開発部隊に確認してみたところ、以下のような内容の返答がありました。

コンポーネントは効率向上等様々な理由から内部的にマルチスレッド処理されており、UI スレッド外のスレッド処理中に発生したイベントから UI スレッドのテキストボックス等にアクセスしようとするとこの例外が発生する。InvokeThrough を使用するか、delegate を使用して対処することになるだろう。

WinForm や WebForm 用のコンポーネントには InvokeThrough プロパティが用意されていますので、

sftp1.InvokeThrough = this;

のようにすることでイベント処理を delegate を使用せずに書けます。しかし .NET CF 用コンポーネントにはこのプロパティはありません。このような場合は以下のようなコードを用意することで対応します。

private delegate void putTextDelegate(String text);
private void putText(String text)
{
if (InvokeRequired)
{
// 別スレッドから呼ばれた時の処理
BeginInvoke(new putTextDelegate(putText), new object[] { text });
return;
}
// 同一スレッドから呼ばれた場合はそのまま出力
tbResponse.Text += text;
tbResponse.Select(tbResponse.Text.Length, 0);
tbResponse.ScrollToCaret();
}

これは SSH 以外の製品でもご利用可能です。以上、ご参考まで。

2007年12月17日月曜日

CodePage 機能について

IP*Works! 製品の多くは開発環境そのものが国際化対応されていれば、日本語等の国際化文字等をある程度正しく扱うことができます。

しかし、ActiveX Edition や C++ Edition 等では表層の文字エンコードを自動検出することができません。このような場合、英語テキストの処理では問題がないのに日本語を文字列として付与するとおかしな結果になってしまうことがあります。

このような場合のために、ActiveX Edition や C++ Edition には Config 設定項目に CodePage が追加されています。この設定を使用することで、弊社コンポーネントに渡す文字列のエンコード形式を CodePage としてコンポーネントに通知することができます。

例えば、製品コンポーネントに UTF-8 形式のデータ (バイト列) を渡す際には
component.Config("CodePage=65001")
のようにします。

もしデータがおかしな化け方をしてしまう場合は、CodePage 設定をお試しください。

なお、この機能は全ての製品エディションおよび全てのビルドでご利用いただけるわけではありません。ご利用いただけるかどうかは実際の製品に依存します。本機能の利用の可否は実際にコードで当該機能を参照していただくことで分かります。

C++ の例:
printf("CodePage=%s\n",component.Config("CodePage"));
CodePage がご利用いただける製品の場合は、その時点でのコードページ番号が出力されます。ご利用いただけない場合は空文字列が返されます。

ご利用いただけない場合の応答は製品エディションによっては空文字列での応答ではなくIPWorks の例外通知を利用するものもあります。これはご利用製品に依存します。

2007年12月11日火曜日

CertMgr のちょっとしたノウハウ

IP*Works! SSL 製品およびその派生製品 (SSH, S/MIME, EDI 等) には各種証明書を統一的に扱うことのできるコンポーネント CertMgr が用意されています。証明書は証明書ストアでまとめて管理できます。(Windows の場合はファイルだけでなくレジストリでも可。)

この証明書ストアファイルを CertMgr でアクセスする方法には、ちょっとばかり癖があるようです。証明書ストアをアクセスするにはストアのタイプ、証明書ストアファイル、そして必要ならパスワードを指定することになるのですが、この順番で指定しないとエラーになりストアファイルをアクセスできません。例えば Java Edition の場合

certmgr1.setCertStoreType(ストア種別);
certmgr1.setCertStore(ストアファイル名);
certmgr1.setCertStorePassword(パスワード);
のようにします。この順番を間違えて、例えば証明書ストアファイル名の指定の後にストア種別を指定するとか、パスワードをストアファイル名指定の前に設定すると例えストアファイルやパスワードに問題がなくても例外 (SSL なら IPWorksSSLException) が発生します。

この件はドキュメントには記載されていませんので今後変更または改善される可能性がありますが、もしファイルもパスワードも正しいのに例外が投げられてしまうような場合はこの記事の件を思い出して、各プロパティの設定順序の変更をお試しいただければ幸いです。

V7 がないワケ

IP*Works! は V6 から V8 へとバージョンがあがりました。V7 はありません。

本件に関してはお問い合わせが多いようで、公式サイトにもコメントがありました。

弊社では V6.0 の出荷直後から V7 アップデートの作業を開始しました。機能の追加や更新は順調に進み実際 IP*Works! S/Shell や IP*Works! EDI AS2 等いくつかの製品は V7 のコードを元に出荷されました。しかし V7 のリリースが可能となる前に、IP*Works! Core をアップデートして IPv6 や 64-bit 対応、Windows Workflow や SQL Server Integration Service、および BizTalk 等の新たなテクノロジーにも対応することとしたのです。これに伴い IP*Works! Core は V7 コードベースでの出荷ではなく、直接 V8 として出荷されることとなったのです。


つまり、比較的大きな技術的ジャンプがあったため V7 ベースでは間に合わず V8 として対応したということのようです。

IP*Works! V8 日本語版について

日本で弊社の製品に興味をもたれた方の多くは日本語版に関心を持たれていると思います。

V6 では日本国内向けに日本語版が出荷されていました。しかし V8 に関しては現時点では日本語版のリリース予定は残念ながらありません。

ただし、公式なサポートは現時点ではなされていませんが、V6 で利用できた日本語機能は内部ロジックとして V8 に引き継がれているものもあり、V8 上でも日本語のメール等は処理できるようです。

またリリースは英語版としてなされるためドキュメントは英文のみとなります。

V8 の日本語対応について

IP*Works! V6 製品では日本国内向けに日本語版が出荷されていました。これはメールやニュース系のコンポーネントに対し、インターネット上で標準的に使用される日本語を扱えるようにしたものでした。


一方 V8 では日本語版は出荷されません。ただし、これは日本語が利用できないことを意味するのではありあません。V6 で埋め込まれた日本語対応ロジックは基本的に受け継がれており、日本語環境で使用する場合は日本語の処理が

IP*Works! V8


/n software 社の通信系コンポーネント製品の新バージョン V8 がリリースされました。当面は .NET Edition と Java Edition のみですが、順次 ActiveX Edition 等もリリースされる予定です。


この V8 ではこれまでの製品では細分化されていたエディションの統廃合が行われ、製品構成が若干変更されています。例えば .NET 系製品ではこれまでは
  • .NET Edition
  • .NET Compact Framework Edition
  • ASP.NET Edition
に細分されていましたが、開発効率の改善および新機能の統一的な処理のため V8 ではこれらは1つにまとめられ .NET Edition として出荷されます。Java 系製品についても Desktop Edition と Server Edition がありましたが、これらも V8 では統合され Java Edition として出荷されます。

IP*Works! 製品の詳細につきましては、http://www.nsoftware.com/ をご参照ください。現時点では英語のみのご案内となっておりますが、日本のお客様向けに日本語コンテンツを今後増やして行きたいと考えております。