- ベストアンサー
DLL不要のソフト製作方法について教えてください
フリーウェアの紹介で「DLL不要/アンインストールする場合はフォルダごと削除・・」との記載をよく見かけますが、こういった「単体EXEで起動するソフト」はどのように作成されているか不思議です。 VBでは単体EXE起動は可能ですか?「VB*.*ランタイムモジュール必須・・・」など見かけますが、VBでは不可能なのでしょうか? 最近、VBを少しずつ覚え自分でも「フリーウェアの製作」を行ってみたいと思います。無知ではありますが、どなたか御教示願います。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
>ただ私のほうは、動的リンクではなく、静的リンクでコンパイル可能なツールという意味で、発言しました。 なるほど、納得です。でもVBって静的リンク不可能でしたっけ? >>フリーウェアの紹介で「DLL不要/アンインストールする場合はフォルダごと削除・・」 >とありますので、TAGOSAKU7さんの方法は現実的ではないような気がしますが・・・ そうですか? 調査しました。 ActiveXコントロールを使用せずに、標準コントロールだけで作成してあるのなら、EXEだけの配布でも、大丈夫みたいです。 VB6で必要とされるランタイムファイルについては、MSDN Libraryに出ているようです。 [MSDN Library Visual Studio 6.0] └[Visual Studio 6.0 ドキュメント] └[Visual Basic ドキュメント] └[Visual Basic の使用方法] └[プログラミング ガイド] └[Visual Basic を使ってできること] └[作成したアプリケーションの配布] └[セットアップ ツールキット] └【配布するファイル】 ですので、ちょっとだけ訂正します。 フォームや標準コントロールだけの使用であれば、フォルダごとの削除は可能のようです。 ただしActiveXを使用したら、フォルダごとの削除は不可能のようです。
その他の回答 (7)
- msystem
- ベストアンサー率42% (79/186)
>私の知識と理解の無さになにかもめているような・・・ いえいえ、私は、もめているという気はありません。TAGOSAKU7さんも非常に大人の回答をいただきありがとうございます。 動的リンク、静的リンクというのは、Windowsのプログラムでは、テキストボックスや、リストボックス、グリッドコントロールなど、さまざまな部品がありますよね。そのような汎用的な部品は、DDLやOCXなどの別ファイルにし、使いたいプログラムがそのプログラムを使い機能を実現します。ただ、使いたい部品がコンピュータにない場合、DLLなどもいっしょにインストールしないと機能しないわけです。これが、動的リンクです。(実際は、プログラムを実行したときに、部品を探し使用するという意味だと思ってください。) 一方、静的リンクは、使いたい部品がDLLなどの形式ではなく、ソースプログラム(実際はコンパイル済みライブラリという形式)で、ツールに付属しています。ですのでその部品の機能を使ってEXEファイルなどを作成するときは、自分で書いたコードといっしょになって、ひとつのファイルになりますので、DLLなどが不要となるのです。(ただし、EXEファイルサイズが大きくなるという欠点もありますが)そのためコピーするだけで、インストールができ、削除するだけでアンインストールができるわけです。私が名前をあげたツールは、この部品のソース(実際は静的リンクライブラリ)が付属していますので、VBではActiveXを使わなければ実現できない機能も、EXEファイル単体で実現できることになります。(もちろん、TAGOSAKU7さんの言うように、VBでも自分でその機能をコーディングすれば、EXE単体で配布することはできます。)
お礼
御丁寧に有難うございます。 なんとなく解かってきました。とりあえず、私の今の技術力では御二人がおっしゃっている事を100%理解する事ができない為、実践形式で学びたいと思います。 ちょうどAPIの本やActiveXの本を借りてきましたので、基礎からやっていきます。 「最初から本で調べろよ」と言われそうですが、何を調べてよいやらのレベルですので本質問に対する回答は大変役立ちました。 有難うございました。 ※以下調べてみました。そういえば動的リンクってDLLの直訳ですね。 【DLL】ダイナミックリンクライブラリ・・・動的リンク 【LIB】スタティックリンクライブラリ・・・静的リンク
- TAGOSAKU7
- ベストアンサー率65% (276/422)
オブジェクトとは、VBでいうとフォームやフォームに貼り付けるコントロール類だと思ってください。 VBでは基本的にツールボックスからテキストボックスやリストボックスを選択して、フォームに貼り付けて画面が出来上がります。 内部ではCreateWindowなどのAPI関数を使用して、それらを作成しています。 ActiveXの多くはCreateWindowでコントロール(オブジェクト)を視覚的に存在させ、マウスやキーボードなどの処理にあわせてイベントを発生させるものです。それらは一つのパッケージになっているわけです。それがランタイム内に収まっている情報というわけです。 ですので、それらを使用せずにCreateWindow関数で画面を作成し、プロセス監視という方法でマウスやキーボードなどの情報を監視し、それに合わせた処理を行うようにしたら、ランタイムは必要ありません。(しかし、ちょっと高度な技必要) >ただ、ActiveXコントロールを使用せずにフリーウェアを作成するとなると難しくなるでしょうか?(機能制限等) それは、作成するソフトのタイプによるので、なんとも言えません。。。 「み~くんパパの仕事部屋」(参照URLをみてください) にサンプルがあります。 VB サンプル.クラス └Windows コモンコントロール をたどって、「APIを使用してリストビューを自作する」「APIを使用してツリービューを自作する」などがあります。 このHPの海外リンクには、エクスプローラのような画面を作成しているところがあって、DLL不要のオブジェクト作りにはいい勉強になります。
お礼
御丁寧に有難うございます。 APIの本を借りてきましたので、あわせて勉強してみます。 本によると「用意されている1000余のAPI関数すべてがVBで使用できるわけではない」と書かれていました。まずはAPIがどこまで使えるかですね。 あまりDLL不要にこだわると高度な技術を要するような気がしてきたので、まずはActiveXを使用したソフト作成から入ってみようと思います。 有難うございました。
- msystem
- ベストアンサー率42% (79/186)
>('_`)ウゥ できないとは言っておりません。できると述べたつもりなのですが・・・ 他の方の発言の内容を詳しく読まず、軽率な発言をして申し訳ありません。 ただ私のほうは、動的リンクではなく、静的リンクでコンパイル可能なツールという意味で、発言しました。 また、TAGOSAKU7さんを批判するつもりは毛頭ありませんが、質問者は >フリーウェアの紹介で「DLL不要/アンインストールする場合はフォルダごと削除・・」 とありますので、TAGOSAKU7さんの方法は現実的ではないような気がしますが・・・ TAGOSAKU7さんの「開発ツール独自のオブジェクトを使用したら・・・」は、ある意味同感ですが、私の発言内容は、あくまで現実解で答えたつもりです。
お礼
私の知識と理解の無さになにかもめているような・・・ 申し訳ありません。 静的/動的リンク・・・難しい言葉が出てきました。持っている限りのVBの本を調べましたがありませんでした。リンクというのはDLLやOCX等へのリンクと理解していますが、何が静的/動的なのでしょうか?TAGOSAKU7さんがサンプルで掲示したwinmm.dllは動的リンクと言うのでしょうか? 勉強不足です。有難うございました。
- TAGOSAKU7
- ベストアンサー率65% (276/422)
>他の方も書いているとおり、VBではexe単体ソフトは作成できません。 他の方とは、おそらくぼくの事でしょうね。。。 ('_`)ウゥ できないとは言っておりません。できると述べたつもりなのですが・・・ VCでもVC独自のオブジェクトを使用したら、VCのランタイムが必要です。 言っているのは、開発ツール独自のオブジェクトを使用したらダメだということです。 標準モジュールしかないプロジェクトに Private Declare Function timeGetTime Lib "winmm.dll" () As Long sub Main MsgBox Now end sub とした時って、ランタイム必要ですか? オブジェクトを持たないし、MsgBox も Now もVBの関数だけど、コンパイルでマシン語になってしまうので、ランタイムを必要としないと思います。
お礼
上記のソースをそのままコピーしコンパイルしてみました。 そのEXEを、VBの動作環境が整えられてないPCへコピーし実行してみました。 MsgBoxとともにNow(システム日付)が表示されるではありませんか! DOSのNETSENDコマンドを思い出してしまいました。 なる程・・・「開発ツール独自のオブジェクトを使用したらダメ」なのですね。 VBでこんな事できるとは・・・TAGOSAKU7さんが言っていたことが何となく解かってきたような気がします。 なにぶん初心者な物ですからVBで言う「独自のオブジェクト」が何か解からない自分が情けないです・・・ 有難うございました。
- msystem
- ベストアンサー率42% (79/186)
他の方も書いているとおり、VBではexe単体ソフトは作成できません。 他の言語では、できるものもあります。たとえばVC、Delphi、C++Builderなど・・・ そのようなものを使用するれば可能だと思います。
お礼
具体的な言語名指定でのご回答有難うございます。 VBではだめですか・・・残念です。 新規の言語取得に励もうと思います。
- TAGOSAKU7
- ベストアンサー率65% (276/422)
うーん それは一概に言えませんが、何にしてもVisualという言葉の付かない言語で行っていると思います。 C(++を含む)でAPIを使用して作成しても、VBでAPIを使用して作成しても、どちらでも画面を持った開発ツールにとらわれないEXEが作成可能です。JAVAでもいいですし、なんでもOKですよ。 ただ、開発ツール独自の画面を使用したら、それ用の情報(DLL)が必要になるということです。 なのでVBやVCのコンパイラを使用してもできます。プログラムの作りの問題であって、言語の問題ではありません。 >ここまでするならVBの意味はあるのであろうか? という意味は、VBは画面を簡単に作成できる利点があるので、その利点を生かさないのであれば必要なのだろうか。本来多くの人がCでやっていたことだなぁ。と思っての発言でした。 たぶん その発言が戸惑わせた原因だと思って、説明しておきました。
お礼
御丁寧に有難うございます。 >VBは画面を簡単に作成できる利点 本格的にプログラミングを始めたのがVBからなので、それがあたりまえと認識しておりました。いわゆる《オブジェクト指向型》と言うのでしょうか。(間違えてたらすみません・・・) ん~奥が深いですね。プログラミングも。フリーソフトを作成している方のHP等からいろいろ調査してみます。有難うございました。
- TAGOSAKU7
- ベストアンサー率65% (276/422)
基本的にコントロール類を使用すると、VB付随のDLLが必要になります。 VBのフォームが存在しているだけで、状況はコントロール類を使用しているのと一緒です。(フォームをロードすることがなくても、プロジェクトに含んでもいけません。) 回避する方法としては、フォーム(画面)を持たないEXEを作成すると、簡単にランタイム不要のEXEができあがります。 どうしても画面を持たせたいのであれば、CreateWindowなどのAPI関数を使用して画面をコードで作りこむ必要があります。(ここまでするならVBの意味はあるのであろうか?)
お礼
なるほど! 単体での起動にはVBはむいていないようですね。 では、フリーソフトで紹介されているDLL不要のソフト類は何で作成されているんでしょう?言語が違うんでしょうか・・・ ご回答有難うございました。
お礼
>ActiveXコントロールを使用せずに、標準コントロールだけで作成してあるのなら、EXEだけの配布でも、大丈夫みたいです。 先程のサンプルソースに別フォームを付加しコンパイル、VBの動作環境が整っていないPCで起動してみました。 OKです。わざわざ調査して頂き有難うございます。結論ですが「VBでも可能」ですね。ただ、ActiveXコントロールを使用せずにフリーウェアを作成するとなると難しくなるでしょうか?(機能制限等) フリーウェアに限らず商品は、使いやすさや機能がないと利用価値がないですからね。 とりあえずVBでやるだけやってみます。そこで壁にぶちあたり抜け道も無ければ、改めてVBでの開発を見直そうと思います。 長い質疑応答になりましたが、有難うございました。 ※MSDN Libraryの存在を今知りました。付け加えて有難うございます。