テキストファイルなどをexeファイルに組み込む方法

解決


夏ばて  2010-09-07 03:33:47  No: 102550

(VB6+XP)
プログラムを動かすのに必要ないくつかのテキストファイルがあり、現在はそれを他のPCで使ってもらうために個別にexeと同時に添付しています。  これをexeファイルに統合できれば1つのファイルにしたいのですがVB6でもできるのでしょうか?  よろしくお願いします。


魔界の仮面弁士  2010-09-07 04:56:47  No: 102551

更新するデータなら、exe 内に埋め込むわけにもいかないので、
外部ファイルなり、レジストリなりで管理する必要があると思います。

一方、更新しないデータなら、文字列リソースとして
exe 内に埋め込むという手法が使えます。埋め込んだリソースは、
プログラムからは、LoadResString 関数で読み取れます。
(VB6 付属の SAMPLES\VB98\ATM\ATM.VBP のように)

なお、リソースファイルは、VB6 リソース エディタ アドインで作成できます。
(\VB98\Wizards\RESEDIT.DLL)


夏ばて  2010-09-07 20:49:36  No: 102552

魔界の仮面弁士様  ご指導をありがとうございます。

埋め込みたいテキストファイルは文章、CSV/スペース区切りのテーブル類なので、書き換えはありません。  

リソースというキーワードを教えていただきましたので色々調べて試してみました。  最初はがバイナリのような文字しか現れませんでしたがHDD上にバイナリのまま書き込んで、それをテキストファイルとして読み込むことで目的を達成することができました。ありがとうございました。

(現在はこれで十分に目的を達成できておりますので解決とさせていただきましたがダイレクトにテキストが読み込めるような簡単でスマートな方法があったら教えてください。)

Private Sub Command1_Click()

Dim bytResData() As Byte

Dim KFile As String
Dim DOC As String, DD As String
Dim F As Integer

'リソースからバイト配列に格納する。
  bytResData = LoadResData(101, "CUSTOM")

KFile = App.Path & "\tmp.txt"
F = FreeFile

'ファイルにデータを保存する。
  F = FreeFile
  Open KFile For Binary Access Write As #F
    Put #F, , bytResData
  Close #F

'List1に表示
List1.Clear

Open KFile For Input As #F
Do While EOF(F) = False

Input #F, DD

List1.AddItem DD
Loop

Close #F

End Sub


魔界の仮面弁士  2010-09-08 00:01:13  No: 102553

> bytResData = LoadResData(101, "CUSTOM")
CUSTOM リソースでも良いですが、文字列リソースの方が扱いやすいと思いますよ。

(1) 標準 exe プロジェクト「Project1.vbp」を作成。
(2) メニューの[アドイン(A)]-[アドイン マネージャ(A)]を起動。
(3) 『VB6 リソース エディタ』を選択し、[ロード/アンロード]をチェックして OK で閉じる。
  もし、該当項目が無い場合には http://support.microsoft.com/kb/190212/ja に従い、
  「REGSVR32 "C:\Program Files\Microsoft Visual Studio\VB98\Wizards\RESEDIT.DLL"」で登録。
(4) ツールバーに、リソースエディタのアイコンが追加されるので、それをクリック。
  (レジストリ エディタアイコンを緑色にしたようなアイコンです)
(5) VB リソース エディタ 画面が開くので、ストリング テーブルを追加。
(6) 初期状態では、1行1列の表ができる(列や行は追加できる)。とりあえずここでは、
  ID = 101 、日本語 = サンプル という行を追加する。
(7) リソースエディタの内容を保存する。
  → プロジェクト エクスプローラに、保存した res ファイルが追加される。
(8) Form1 の Load イベントに『MsgBox LoadResString(101)』と記述。
(9) 実行すると「サンプル」と表示されるはず。


夏ばて  2010-09-08 20:34:42  No: 102554

魔界の仮面弁士様  詳細なご指導をありがとうございます。
ストリングテーブルに書き込んでMsgBoxに表示することができました。
この手法で既にできているテキストファイルを一挙に登録するようなことができるのでしょうか。  例えばクリップボードからインポートできるような機能があれば試したいと思い探しましたがエキスポートしかないようです。コピペもだめでした。  もしもこれが可能であれば前回のコードのように一旦HDDにテキストファイルを吐き出してから読み込むという迂回したものよりスマートになるかと思いますので試してみたいと思います。  よろしくお願いします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加