[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/03/31(Thu) 13:16
投稿者名:ノス
URL :
タイトル:
作成したDLL使用について
ActiveX DLL を使用して以下の加算プログラムのDLLを作成しました。
Keisan.DLLというのを作成したのです。

Public Function Kasan(a As Long, b As Long) As Long
    Dim Goukei As Long
    Goukei = a + b
    Kasan = Goukei
End Function

そして、実際にそれを呼び出す際に参照設定を使わずに呼び出したかったので、

Declare Function Kasan Lib "keisan.dll" (ByVal a As Long, ByVal b As Long) As Long

Private Sub Command1_Click()
    Dim a As Long
    Dim b As Long

    a = Text1.Text
    b = Text2.Text
    Label1.Caption = Kasan(a, b)
End Sub

としてみたのですが、「エントリKasanがDLLファイルKeisan.dll内にみつかりません」と出てしまいます。
この場合は、どのように回避すればいいのかが、わかりません。
どなたか教えていただけないでしょうか??

投稿時間:2005/03/31(Thu) 13:57
投稿者名:Say
Eメール:
URL :
タイトル:
Re: 作成したDLL使用について
ActiveX DLLにDeclareは使えません
参照設定がいやならCreateObjectしてください。

投稿時間:2005/03/31(Thu) 14:25
投稿者名:ノス
URL :
タイトル:
Re^2: 作成したDLL使用について
> ActiveX DLLにDeclareは使えません
> 参照設定がいやならCreateObjectしてください。

CreateObjectというのは、Excelを使用したりするときに使用する関数のことですよね?
どのようにdllを指定するようにするのですか?
すみませんが、教えてください。

Private Sub Command1_Click()
    Dim a As Long
    Dim b As Long
    Dim DKansu As Object

    Set DKansu = CreateObject("Keisan.dll", "合計.Cls")

    a = CLng(Text1.Text)
    b = CLng(Text2.Text)
    Label1.Caption = DKansu.Kansu(a, b)
End Sub

としてみましたら、ローカルマシンにクラスが登録されていませんとエラーが出てしまいます。
ヘルプを参照しましたら、最初の引数がローカルマシンに登録されていないというので、
WINDOWS\SYSTEMにdllをコピーしたのですが、同じエラーがでてしまいます。

使い方が間違っているのでしょうか??

投稿時間:2005/03/31(Thu) 15:05
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^3: 作成したDLL使用について
> CreateObjectというのは、Excelを使用したりするときに使用する関数のことですよね?
> どのようにdllを指定するようにするのですか?

指定方法は、
  Set O = CreateObject("プロジェクト名.クラス名")
です。
たとえば、"Project1.Class1" とか、"Keisan.Gokei" とか。

> としてみましたら、ローカルマシンにクラスが登録されていませんとエラーが出てしまいます。
この場合は、第2引数を指定しないようにしてください。
第2引数は、他のPCでオブジェクトを生成する場合などに使うオプションです。


> WINDOWS\SYSTEMにdllをコピーしたのですが、同じエラーがでてしまいます。
DLLの配置先はどこでも構いませんが、DLL自体はコピーするだけでなく、
レジストリ登録が必要になりますよ。
(開発環境では、コンパイル時に自動的にレジストリ登録が行われます)

投稿時間:2005/03/31(Thu) 15:24
投稿者名:ノス
URL :
タイトル:
Re^4: 作成したDLL使用について

> 指定方法は、
>   Set O = CreateObject("プロジェクト名.クラス名")
> です。
> たとえば、"Project1.Class1" とか、"Keisan.Gokei" とか。

プロジェクト名は、合計.vbpなのですが、プロパティで設定したのは、KeisanHです。
クラス名はClass1(合計.cls)となってします。
なので、"KeisanH.Class1"としてみました。

Private Sub Command1_Click()
    Dim a As Long
    Dim b As Long
    Dim DKansu As Object

    Set DKansu = CreateObject("KeisanH.Class1")

    a = CLng(Text1.Text)
    b = CLng(Text2.Text)
    Label1.Caption = DKansu.KansuP(a, b)  ←
End Sub

すると、←のところで、オブジェクトはこのプロパティまたはメソッドをサポートしていません
とエラーがでてしまいました。
指定の仕方が間違えていますか?


> > としてみましたら、ローカルマシンにクラスが登録されていませんとエラーが出てしまいます。
> この場合は、第2引数を指定しないようにしてください。
> 第2引数は、他のPCでオブジェクトを生成する場合などに使うオプションです。
>
これは上記方法で解決しているのですよね?

> > WINDOWS\SYSTEMにdllをコピーしたのですが、同じエラーがでてしまいます。
> DLLの配置先はどこでも構いませんが、DLL自体はコピーするだけでなく、
> レジストリ登録が必要になりますよ。
> (開発環境では、コンパイル時に自動的にレジストリ登録が行われます)
このことは、別の人が別のPCで使用するときに必要になるということですか?

なにやら、質問に質問を重ねてしまっていますが、必死にがんばっていますので、
教えてください。お願いします。

投稿時間:2005/03/31(Thu) 17:10
投稿者名:ノス
URL :
タイトル:
解決しましたありがとうございます。
Private Sub Command1_Click()
    Dim a As Long
    Dim b As Long
    Dim DKansu As Object

    Set DKansu = CreateObject("Keisan.Class1") ←プロジェクト名.クラス名

    a = CLng(Text1.Text)
    b = CLng(Text2.Text)
    Label1.Caption = DKansu.Kasan(a, b)
End Sub


で実行できるようになりました。どうもありがとうございます。