- - PR -
Delphi8にて動的DLLの呼び出し方法
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-03-06 10:37
「kiki様」
たびたび返信ありがとうございます。 やはり、必ず値“0”が戻ります。 フルパスでも同様でした。 この後もいろいろ考えてみましたが、分からずじまいです。 しばらくして、昔購入した本があることに気づき、 本棚から引っ張ってきて、この関数を見ました。この本によると、 function GetModuleHandle(lpModuleName: string): HMODULE; の「lpModuleName」のファイル拡張子が省略された場合、“.DLL”が指定された ものとみなされるそうです。 また、「FileExists」を使用してもTrueが返ってきていますので、ファイルの存在は、 確認済みです。 まだ、どこかに問題があるのでしょうね、きっと。 もし、また、何かございましたら、 よろしくお願い致します。 | ||||
|
投稿日時: 2004-03-06 11:45
objectです。
「LoadLibrary」と「GetModuleHandle」は、確か基本的には同じ機能だと思います。 私の環境で「user32」と「独自dll」を「LoadLibrary」、「GetModuleHandle」させてみましたが、「0」以外の値が返って来ましたよ。 「灼熱」さんの環境で、「user32」は「LoadLibrary」、「GetModuleHandle」出来ますか? | ||||
|
投稿日時: 2004-03-06 11:57
上とダブリました。削除します。[ メッセージ編集済み 編集者: object 編集日時 2004-03-06 11:59 ] | ||||
|
投稿日時: 2004-03-06 13:32
こんみちは。
すんません 私も、ちょっと、関係のないことですが、 最近Delphi8の日本語版を購入しました。 いろいろと言われていますが、私的には、8、なかなかよいです。 とはいえ、CHNさんの言われるように、Japanの対応は弱く、 いまだにホームページのFAQでは、Delphi 1.0だのDelphi 2.0だの というタイトルが堂々と(一般的には、6、7、8くらいの題目にしておいて 昔のバージョンは奥の方に隠すものではないかと…)乱立してますし、 8を使っていて、WebのヘルプがすぐにBorland USAに行ってしまう (当然ながらすべて英語)というのも、手抜きかな〜と。 結局行き詰まったときにBorland USAということになるのなら、 最初から英語版でもいいのかな…と、ここのところ思うようになりました。 (ま、エディタは漢字に対応してもらっていないと少々不便なので、 1Editorなどを使うとして…)、もう少しJapan様には、eCOM Supportingも含め 核となるところだけは死守してがんばってもらいたいところです。 | ||||
|
投稿日時: 2004-03-06 13:35
あちゃ、↑↑↑。大変失礼しました。一見さんなもので、デフォルトで名前が未記入になるんですね。けんのんと申します。名も名乗らず、大変、失礼いたしました。
| ||||
|
投稿日時: 2004-03-08 18:37
「object様」
何度も返信ありがとうございます。 procedure TForm1.Button1Click(Sender: TObject); var UHandle: HMODULE; begin UHandle := GetModuleHandle('user32.dll'); if UHandle <> 0 then begin ShowMessage('True'); end else begin ShowMessage('False'); end; UHandle := LoadLibrary('user32.dll'); if UHandle <> 0 then begin ShowMessage('True'); end else begin ShowMessage('False'); end; end; いずれも、True(値='2010054656')が戻ってきます。 あと、C:\WINDOWS\SYSTEM32に、作成した[Library1.DLL]を コピーして、上記の'user32.dll'のところを'Library1.DLL'に したところ、GetModuleHandleのときは、Falseで、 LoadLibraryのときは、Trueが戻ってきました。 「けんのん様」 この件とは、別件ですが、 お時間があれば、下記の件をDelphi8で確認して頂きたいのですが・・・。 (なにぶんDelphi8の情報が少なくて…。) ------------------------------------------- ASP.NET Web アプリケーションにて、 メニューより、プロジェクト - 参照の追加 [新しい参照]の[参照]ボタンをクリックすると、 ファイルの種類が“すべての参照(*.dll,*.ocx,*.tlb,*dlb,*.exe)”というダイアログが表示されますよね? そしてご自分で作成したDLLファイルを選択し、[OK]ボタンをクリックすると、 うまく設定できます?それとも “Failed to load resources from resource file Please check your Setup” というエラーメッセージが出てきて、Delphi8が落ちないですか? ------------------------------------------- | ||||
|
投稿日時: 2004-03-08 19:07
VCベースの知識で申し訳ないのですが、いままでの流れからDLLの参照ができていないだけ だと思われます。 おそらくLoadLibraryでフルパスを指定していただければうごくと思います。 ちなみにLoadLibraryはDLLを読み込んでモジュールハンドルを取得、 GetModuleHandleは読み込んであるDLLのモジュールハンドルを取得します。 なので今回の例ではLoadLibraryは正常終了し、GetModuleHandleはエラーになります。 (おそらく呼び出す順番を逆にすると両方正常終了するはずです) user32.dllは起動するときに自動的に読み込まれるはずなのでLoadLibraryでも GetModuleHandleでもエラーになりません。 [ メッセージ編集済み 編集者: ゆうじゅん 編集日時 2004-03-08 19:08 ] | ||||
|
投稿日時: 2004-03-09 09:09
「ゆうじゅん様」
返信ありがとうございます。 >>VCベースの知識で申し訳ないのですが、いままでの流れからDLLの参照が >>できていないだけだと思われます。 分かりました。とりあえず、「DLLの参照」の点から、 もう一度、確認したいと思います。 (Delphi8のインストール等の設定がおかしいのかな?) 少し時間がかかるかも知れませんが、 後日、結果を投稿致します。 |