VBで作ったDLLをDelphi上から実行したいのですが、どのようにすればよいのでしょう?


Delphiで作ったDLLと同じように実行しようとすると、
「プロシージャエントリポイントが見つかりませんでした」
という旨のエラーが出て実行することができません。

下記のサイトを参考にしてDelphi製のDLLの作成・利用を行いました。同じような記述でVB製のDLLを動かそうとしたのですが、前述のエラーが発生してしまいます。
http://oto.chu.jp/kujira/text/delphi/dll.htm

VB製のDLLをDelphiで使うには、何か特別な書き方などが必要なのでしょうか?
DLLの中にある処理そのものは、とりあえず、テストとしてニ値のintegerを加算するだけなのですが……。

詳しい方いらっしゃいましたら、お願いします。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2006/05/24 08:52:26
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:llusall No.3

回答回数505ベストアンサー獲得回数61

ポイント39pt

再回答ですみません。

>VB製のActiveX DLLは、通常のDLLと同じように呼び出すことはできないということでしょうか。


呼び出せる様です。

以下、ヒントとなるスレッドを記載します。

http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/057/0572...

http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/057/0572...

http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/057/0572...

http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/057/0572...

http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/057/0573...

ポイントは、

xxxxxx := CreateOleObject('ProjectName.ClassName');

を使用するところにあるようです。


ちょうど、本日、Delphiをインストールしたのですが、あいにくVBが無くて、

確認とれません。すみません。

id:hina1981

ありがとうございます。

Delphi製のDLLとは、全く違う呼び出し方をする必要があるのですね。

読んでみるとPersonal Editionでは、実行できないけれども、Professional Edition以上だったら、

xxxxxx := CreateOleObject('ProjectName.ClassName');

ができるみたいですね。

今、手元にPersonal Editionしかないので、試すことができないのですが、試す機会があったら試してみたいと思います。

では、Personal Editionでは呼び出すことができないのでしょうか?

2006/05/22 13:10:44

その他の回答2件)

id:villain No.1

回答回数174ベストアンサー獲得回数12

ポイント40pt

VBで作成したDLLはVBでしか利用できないみたいです。


VBで作成したDLLをVCから呼び出すには?


実際にはCOM経由で操作できるかもしれませんが...。

id:hina1981

ありがとうございます。

VB製のActiveX DLLは、通常のDLLと同じように呼び出すことはできないということでしょうか。

どのような方法でも結構ですので、ご存知の方がいらっしゃいましたら、お願いします。

2006/05/19 14:31:49
id:llusall No.2

回答回数505ベストアンサー獲得回数61

ポイント1pt

>「プロシージャエントリポイントが見つかりませんでした」

メッセージから察するに、そのDLLの中に、Delphiで宣言している関数が見つからなかった。という事ではないかと思います。

関数の宣言にスペルミスがないかどうか見直してみたらいかがでしょうか?

id:llusall No.3

回答回数505ベストアンサー獲得回数61ここでベストアンサー

ポイント39pt

再回答ですみません。

>VB製のActiveX DLLは、通常のDLLと同じように呼び出すことはできないということでしょうか。


呼び出せる様です。

以下、ヒントとなるスレッドを記載します。

http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/057/0572...

http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/057/0572...

http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/057/0572...

http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/057/0572...

http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/057/0573...

ポイントは、

xxxxxx := CreateOleObject('ProjectName.ClassName');

を使用するところにあるようです。


ちょうど、本日、Delphiをインストールしたのですが、あいにくVBが無くて、

確認とれません。すみません。

id:hina1981

ありがとうございます。

Delphi製のDLLとは、全く違う呼び出し方をする必要があるのですね。

読んでみるとPersonal Editionでは、実行できないけれども、Professional Edition以上だったら、

xxxxxx := CreateOleObject('ProjectName.ClassName');

ができるみたいですね。

今、手元にPersonal Editionしかないので、試すことができないのですが、試す機会があったら試してみたいと思います。

では、Personal Editionでは呼び出すことができないのでしょうか?

2006/05/22 13:10:44
  • id:llusall
    イルカ頂き、ありがとうございました。

    ??
    >読んでみるとPersonal Editionでは、実行できないけれども、
    そんな記述がありました?

    そのような制約は無いと思うんですが・・・。
    もしあったとしても、Personal EditionでOLEオブジェクトを使えないなんておかしいですよね。

    ちょいと、やってみる価値はあると思いますよ!

  • id:hina1981
    コメントありがとうございます。

    申し訳ありません。今、読み返したら、返信コメント中で話題が飛躍していました。

    というのは、
    普通に、CreateOLEObjectを書いただけでは、
    「未定義の識別子エラー」となってしまったため、uses節にComObjを追加しました。

    これで、コンパイルは通るようになったのですが、今度は実行時に
    「ソースファイルが見つかりません。:ComObj.pas」
    というエラーが出るようになりました。

    このエラーメッセージで検索をかけて調べてみたところ、下記のページが見つかりました。

    http://homepage1.nifty.com/MADIA/delphi/delphi_bbs/200308_03080049.html
    http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200306/03060045.txt

    下のほうのURLの中で
    > しかし、Delphi6のPersonalにはソースが付属して
    > いないので「見つかりません」と言うエラーがでます。

    とあったので、無理なのだと思ってしまいました。

    他のEditionから、ComObj.pasをコピーすれば、うまく動くような気もしたのですが……。ライセンス的に問題が起こりそうな気がしたので、試していません。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません