| MS IE3.0 NT4.0 | 正常にBase64エンコードします(SJIS) |
| Netscape 3.0 Nt 4.0 | Base64エンコードを中止しヌルを送信します |
| Netscape 3.0 MAC | でたらめなコードを生成します |
1、DCOMCNFG.EXEを起動します。 (winnt\system32 ディレクトリ)
2、[既定のセキュリティー]タブを選択します。

3、IUSR_MACHINENAME(MACHINENAMEはコンピュータの名前)を[既定のアクセス権]と[既定の起動アクセス権]に追加します。
この際に[ユーザーとグループの追加]ダイアログボックスで[ユーザーの表示(&U)]ボタンをクリックするとIUSR_MACHINENAMEをリストから選択できるようになります。

4、設定を有効にするためIISを一度停止し、再起動します。
以上でDCOMアクセス権の設定の設定は完了です。
宣言: Private Declare Sub ChangeJisToMs Lib "VbFirst.dll" Alias "_ChangeJisToMs@4" (ByVal str As String)サンプルコード
Private Sub Form_Load() Dim a$ Open "jis.htm" For Input As #1 a$ = Input(LOF(1), #1) 'ファイルからJISコードのhtmlを読み込む Close ChangeJisToMs a$ 'コード変換関数を呼ぶ Open "sjis.htm" For Output As #1 Print #1, Trim$(a$) '変換後のデータをファイルに書込む Close End Subコード変換は ChangeJisToMs 関数を呼んで変換します。引数の文字列はSJISコードに変換されて戻ります。この際にSJISコードにする事により、最初の文字列よりも長さは短くなりますがあまったバッファは空白でうめられます。必要に応じてTrim関数を使用してください。
dim FileNum as integer FileNum = FreeFile '使用可能なファイル番号を得る DoEvents '別のタスクに制御を譲る Open "c:\test.txt" for input as #FileNum'ファイルオープン .... Close FileNumこの例ではきちんとVBから使用可能なファイル番号を取得していて問題なさそうですが、 最初のDoEventsの前で取得した番号はOpenステートメントで初めて使用されます。DoEventsで 他のタスクに制御が移りそちらで使用可能なファイル番号を取得した場合、同じ番号を他のスレッド が獲得してしまう事になります。そして他のタスクでファイルがオープンされ、クローズする前に タスクが戻って来るとOpenステートメントでエラーになります。正しくは以下の様になります。
dim FileNum as integer FileNum = FreeFile '使用可能なファイル番号を得る Open "c:\test.txt" for input as #FileNum'ファイルオープン DoEvents '別のタスクに制御を譲る .... Close FileNumまた、Closeステートメントも気をつけなければなりません。ファイル番号を指定しなかった場合、 すべてのファイルがクローズされます。すなわち処理中の他のタスクのファイルも閉じてしまいます。 さらにオープンするファイル名は他のタスクで同じにならないよう注意が必要です。
OLE では、インプロセス OLE サーバーのメソッドに対する呼び出しは順次処理されません。 したがって、同じメソッドに対して複数の呼び出しを実行すると、呼び出しリストに、同時にこれらの 呼び出しが登録されます。通常のアプリケーションで DoEvents 関数をネストした場合と同様に、 各呼び出しは呼び出したときと逆の順序で終了します。
これを具体的に説明しますと、先ほどのデータベースの例で、同じ要求をまずAさんが先に出し、
1秒後にBさんがアクセスしたとします。通常ならばAさんBさんの順で結果が見れるはずですが、
OLE DLLの制限からBさんAさんの順で結果が返ります。もし、途中でCさんDさんが加わったとしますと
Aさんに結果が帰るのは4人の一番最後になってしまいます。反対に一番最後にアクセスしたDさんが
一番最初に結果が得られます。このような状況はごくまれかと思いますが、かなりビジーなサイトでは
問題になることがあるかもしれません。
そこでWebExtenderでは同じクラスの同じメソッドを発行する場合に限って,メソッドの発行を遅らせ、
この問題を回避します。すなわち再入しない様に処理します。
WebExtenderではString型でデータを返す方法が標準となっています。
OLE DLLのプログラムでHTML文書をString型の変数に収める事になりますが、次のようなコードの場合変数
の長さが長くなればなるほど処理に時間がかかってしまいます。
たとえば、データベースからデータを読み込み、表形式にフォーマットして返す場合等です。
Dim a as string Do a = a & "xxxxxx" Loop Until xxxx表の1行が256Byteで500行あったとしますとデータ量は125Kbになります。数KB程度であれば全く問題ないの ですが、サイズが増すにつれて非常に遅くなります。VB2では全く問題なかったのですがVB4/32では桁違い に速度が遅くなります。(VB2では64Kbyteまでですが)恐らくUNICODEに起因する問題かと思われますが、 WebExtenderにとっては大きな問題です。256byteの文字列を500回つなげた場合Pentium 100MHzで約5秒も かかります。
まず以下のサンプルコードで示される様な文字列を連結するプログラムがあったとします。
dim streem as string dim a$ streem = "Abc" streem = streem & "Def" a$ = streem streem = ""上記と全く同じことをVbStreemを使って行った例を示します。
Dim A$ Dim streem as New VBStreem streem.append "Abc" streem.append "Def" a$ = streem.text streem.clear上記コードの詳細説明をします。 まずプロジェクトにVbStreem.clsを追加します。 文字列を連結したいプロシージャでVbStreemクラスのインスタンスを作成します。
Dim A$ Dim streem as New VBStreem格納したい文字列をappendメソッドで追加します。
streem.append "Abc" streem.append "Def"結果の取得はtextプロパティーで取得します。
a$ = streem.texta$の値は "AbcDef" となります。
streem.clearこのクラスは2つのメソッドと一つのプロパティーで構成されます。 VBStreemクラスではVBFirst.DLLを使用しています。 あらかじめVBFirst.DLLを\WINNT35\system32もしくはWin95\systemディレクトリにコピーしておく必要が あります。