VBでdllという拡張子がありますが、本の説明を呼んでも意味がよくわかりません。
わかりやすい説明がほしいです。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

VBで使用されるDLLがどういうものか、という解説は


できませんがDLLとは?というのは少しわかります

DLL=Dynamic Link Library

ですから日本語に無理やり置き換えると
「動的につながる図書館」???

一言でいうと
「動いて」といわれて動く部品です

もっとわからないとおもうのですが
たとえぱVBのアプリケーションを自動車に置き換えます

VBを自動車、「EXEファイル」をキー、「DLLファイル」をエンジン
として考えてください

EXEファイルは自動車のキーです
これを使うと自動車を走らせる準備ができます
(ただ、ここではまだ自動車は走りません)

使用者がVBでなにか操作をします。
これは自動車でいうとアクセルを踏み込むということです
(ここの部分のはちょっと長くなるので説明を飛ばします)

アクセルを踏まれると自動車はエンジンを動かす命令を出します
そうするとエンジンは動きます

このエンジンに当たる部分がDLLです

実際に動かすノウハウは持っているのですがそれだけでは
動けません
外部からの働きかけによって動作するパーツです
また場合によってはガソリンのように動作するために必要な
ものがあります(VBだとプロジェクトなど)

お力になれれば幸いです

この回答への補足

ありがとうございます!
かなりよくわかりました!
例えるのがうまいですね~
それが一番理解しやすいです。
ありがとうございました!

補足日時:2002/02/16 15:19
    • good
    • 0

分かりやすいかどうかは分かりませんが


簡単に言うと関数の集合体です。

この回答への補足

参考になりました~
ありがとうございます!

補足日時:2002/02/16 15:25
    • good
    • 0

おもにメモリーの節約のためにマイクロソフトが考え出した工夫だと


思います。人間が仕事をする時に、10人が有る部屋で仕事をするのに、有る道具を10個各人が持たせないで、共同で1つを必要な時
に使いに行くとすれば、場所を取る道具なら、スペースの節約に
なりますよね。そういうアイデアから来るようです。だからマイクロソフト
に限らず普遍的なソフトの考え方なのです。DLLでは道具に当たるのは、良く使う基礎的なプログラムのことになります。基礎的なところへ降りて行けば行くほど、共通な処理がいろいろな場面で使われる
事がわかり、こういう工夫になるのでしょう。内湯と銭湯などもスペース
やエネルギーや水の面からは銭湯のほうが利があるのでは。
いやいや脱線しました。イメージ的にヒントになれば。
Dynamicとは必要な時に使わせ(Linkする)、使い終わったら開放する(Unlink)ことを言っていて、Staticの反対である。そして道具すなわちソフト群は図書館(Library)に集めてあるのです。
DLL=DynamicLinkingLibrary

この回答への補足

ありがとうございます!
みんな天才ですよ、まじで!
ありがとうございました!

補足日時:2002/02/16 15:21
    • good
    • 0

こんにちは♪



関連した質問と答えがありましたので、参考にしてください。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=216951

この回答への補足

参考になりました~
ありがとうございます!

補足日時:2002/02/16 15:25
    • good
    • 0

こんにちは。



http://yougo.ascii24.com/
アスキーの用語辞典の
http://yougo.ascii24.com/gh/72/007270.html
の説明では、不足でしょうか?

DLLは、VBだけでなく、VCや、Windowsのアプリケーションで広く使われています。

参考になれば。
でわ

この回答への補足

参考になりました~
ありがとうございます!

補足日時:2002/02/16 15:26
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QCで作成したDLLをVBで呼出

Cで作成したDLLの関数をVB6.0から呼び出す事ができず、悩んでおります。
ご教授お願いします。

どの様な関数を呼び出そうとしているのかというと、以下の通りです。

<DLL Cで作成(コンパイラVC6)>

void WINAPI hoge(BSTR pgname,BSTR fmt,...){
~処理~
}
/* 宣言では頭にDLLExport*/

<呼出側 VB6.0で作成>
'宣言
Public Declare Function hoge Lib "hoge" _
(ByRef pgname as String , _
ByRef fmt as String , _
ParamArray args())

'呼出
call hoge("foo","baa","array1",2)

この様なコードを書いております。
C側、VB側ともに固定数の引数にしてみたところ、
通ったので「ParamArray args()」の定義が違うのではないか・・・?と思っているのですが、
どの様に宣言したらよい物なのでしょうか?
もしくは、そもそも全然違う箇所を間違っているのでしょうか?

宜しくお願いします。

※ 説明の足りない箇所があれば、仰ってください。

Cで作成したDLLの関数をVB6.0から呼び出す事ができず、悩んでおります。
ご教授お願いします。

どの様な関数を呼び出そうとしているのかというと、以下の通りです。

<DLL Cで作成(コンパイラVC6)>

void WINAPI hoge(BSTR pgname,BSTR fmt,...){
~処理~
}
/* 宣言では頭にDLLExport*/

<呼出側 VB6.0で作成>
'宣言
Public Declare Function hoge Lib "hoge" _
(ByRef pgname as String , _
ByRef fmt as String , _
ParamArray args())

'呼出
call hoge("foo","baa","ar...続きを読む

Aベストアンサー

http://hata.cc/docs/DLL/3.html

リテラル定数でなく、変数にしてbyval渡しにすればよいのでは。

Q構造体配列を引数とするDLL作成し、VBで呼ぶには?

はじめまして。
VisualC++6.0でDLLを作り、VisualBasic6.0にて
VisualC++の関数をコールし、構造体配列の値を
渡そうとしていますがうまくいきません。
どなたかよい知恵をお貸しください。
宜しくお願い致します。
下記に、VisualC++6.0とVisualBasic6.0のやりとり
を記します。

*====Visual C++ 6.0側=====
typedefstruct_DLP_MSGDATA
{
intflg;
charmsg[504];
inttmp;
} DLP_MSGDATA;

_declspec(dllexport) int _stdcall SampSub(int data, DLP_MSGDATA *mdata)
{

return( 0 );
}


*====Visual Basic 5.0側=====
Declare Function SampSub Lib "test.dll" Alias "_SampSub@8" _
( _
ByVal tlp_id As Long, _
ByRef mdata() As DLP_TLP_MSGDATA _
) As Long


Type DLP_TLP_MSGDATA
flg As Long
msg As String * 504
tmp As Long
End Type

Private Sub test()
Dim mdata(0 To 130) As DLP_TLP_MSGDATA
Dim aa As Long

Call SampSub( aa, mdata )

End sub

はじめまして。
VisualC++6.0でDLLを作り、VisualBasic6.0にて
VisualC++の関数をコールし、構造体配列の値を
渡そうとしていますがうまくいきません。
どなたかよい知恵をお貸しください。
宜しくお願い致します。
下記に、VisualC++6.0とVisualBasic6.0のやりとり
を記します。

*====Visual C++ 6.0側=====
typedefstruct_DLP_MSGDATA
{
intflg;
charmsg[504];
inttmp;
} DLP_MSGDATA;

_declspec(dllexport) int _stdcall SampSub(int data, DLP_MSGDATA *mdata)
{

return( 0 ); ...続きを読む

Aベストアンサー

(2)の方法で問題ないと思いますが..

'第2引数の型をAnyに変更
Declare Function SampSub Lib "test.dll" Alias "_SampSub@8" _
( _
ByVal tlp_id As Long, _
mdata As Any _
) As Long

Declare Sub MoveMemory Lib "kernel32.dll" _
Alias "RtlMoveMemory" _
(Destination As Any, _
Source As Any, _
ByVal Length As Long)

ReDim bdata(131 * Len(mdata(0))) As Byte

'構造体の配列をbyte配列にコピー
For i = 0 To 130
MoveMemory bdata(i * Len(mdata(0))), mdata(i), Len(mdata(0))
Next
Call SampSub(1, bdata(0))
'byte配列を構造体の配列にコピー
For i = 0 To 130
MoveMemory mdata(i), bdata(i * Len(mdata(0))), Len(mdata(0))
Next

(2)の方法で問題ないと思いますが..

'第2引数の型をAnyに変更
Declare Function SampSub Lib "test.dll" Alias "_SampSub@8" _
( _
ByVal tlp_id As Long, _
mdata As Any _
) As Long

Declare Sub MoveMemory Lib "kernel32.dll" _
Alias "RtlMoveMemory" _
(Destination As Any, _
Source As Any, _
ByVal Length As Long)

ReDim bdata(131 * Len(mdata(0))) As Byte

'構造体の配列をbyte配列にコピ...続きを読む

Q文字列を返すVCで作成したDLL関数をVBで呼ぶと...

VC++で文字列を返すDLL関数を作成しました。

LPCSTR GetVcString(void)

これをVBでStringとして受け取り、MsgBoxで表示すると正常に取得できているようなのですが、Lenで文字数を取得すると変な値が返ってきます。

1. Dim Ret As String
2. Ret=GetVcString()
3. MsgBox(Ret) ← VCで返された文字列は正常に表示されている
4. MsgBox(Str(Len(Ret))) ← 実際の文字数とはかけ離れた数値になる

2行目と3行目の間に、
Ret=Left(Ret,InStr(Ret,vbNullChar)-1)
を噛ませれば文字数は正常な値になるのですが、このような処理をしなくても正常に文字数を取得する方法があれば教えてください。

Aベストアンサー

こんにちは。maruru01です。

関数が返す文字列が、固定長で残りの部分がvbNullCharで埋まっているので、vbNullCharの手前までを抜き出す処理を入れなければいけません。
WinAPI関数などでは、このようなことはよく見られます。
単に文字数を出したいなら、

MsgBox(InStr(Ret, vbNullChar)-1)

でいいと思いますが。
でもその後でいろいろと処理するなら、

Ret=Left(Ret,InStr(Ret,vbNullChar)-1)

を入れた方がいいと思います。
たかが1行だし。

QCで作成したDLL関数をVBから呼ぶ

以前にあった「Cで作成したDLL関数をVBから呼び 引数渡し方法」を試したのですがVB側でデータが受け取れません。

http://oshiete1.goo.ne.jp/kotaeru.php3?q=711327

C側での値設定がわるいのでしょうか?

VB側
Public Declare Function testAP Lib "C:\bin\test.dll" (ByVal lpKeyData As String) As Long
---------------------------------------------------------------------------
Dim lngRc As Long
Dim keydata As String * 128

keydata = String$(128, Chr(0) & Chr(0))
lngRc = testAP(keydata)

VC側
__declspec(dllexport) long __stdcall testAP(char *lpdata){
→C側でlpdataに値を設定する
lpdata="ABCDEF";
}

以前にあった「Cで作成したDLL関数をVBから呼び 引数渡し方法」を試したのですがVB側でデータが受け取れません。

http://oshiete1.goo.ne.jp/kotaeru.php3?q=711327

C側での値設定がわるいのでしょうか?

VB側
Public Declare Function testAP Lib "C:\bin\test.dll" (ByVal lpKeyData As String) As Long
---------------------------------------------------------------------------
Dim lngRc As Long
Dim keydata As String * 128

keydata = String$(128, Chr(0) & Chr(0))
lngRc = testAP...続きを読む

Aベストアンサー

VC側のlpdataの設定が違っています。
ポインタの代入ではなく、文字列のコピーにしてください。

VC側
__declspec(dllexport) long __stdcall testAP(char *lpdata){
→C側でlpdataに値を設定する
strcpy(lpdata,"ABCDEF");
}

QVBでテキスト形式のファイル名称から拡張子を取りたい

みなさんこんにちは^^

ちょっと困っています。
VB6でコーディングを行っていますが
取得したファイル名称を一旦ワークに落として
それを出力ファイル名に利用したいのですが、
拡張子が邪魔をして上手く行きません。
何か拡張子を取るような方法があれば教えて頂きたいのですが!

例)入力ファイル名称 → 変換 → 出力ファイル名称
  AAA.TXT AAA_001.TXT
BBB_001.TXT BBB_001.TXT

Aベストアンサー

FileSystemObjectを使ったらどうですか?

拡張子&ファイル名を取得する方法を書いときます
参照設定で「Microsoft Scripting Runtime」を参照します。
'拡張子のみ取得
Function hoge1(strPath As String) As String
Dim fso As New FileSystemObject
hoge1=fso.GetExtensionName(strPath)
End Sub

'ファイル名のみ取得
Function hoge2(strPath As String) As String
Dim fso As New FileSystemObject
hoge2=fso.GetFileName(strPath)
End Sub

じゃ、そゆことで。


人気Q&Aランキング

おすすめ情報