- ベストアンサー
DLLの使用時トラブルについて
プログラム初心者です。 基本的な内容かもしれませんが ご教示のほどよろしくお願いいたします。 今、マクロでプログラムを記述しています。 実際には、サンプルコードがあるので書き写しなのですが 書き写してもエラーがでて下記の疑問についてご教示頂ければ と思いよろしくお願いいたします。 <質問内容> 使用するDLLのプログラムが入っていないパソコンで DLLを定義すると下記のようなコメントが出るのでしょうか? それとも、他の原因によるものでしょうか? (書き方はサンプルコード丸写しで間違えている可能性は不明です。) コンパイルエラー ”End Sub、End FunctionまたはEnd Property以降にはコメントのみが記述できます。” ローカルなDLL(DLLという言い方は全てローカルという定義なのか不明ですが。)があり、それを定義するため、subプロシージャの後にDeclareしたのですが、ステップインするとこのラインで 上記のコンパイルエラーがでます。 内容は至って当たり前(解釈が間違えていなければ)と思うような内容で、私は関数の後にプログラムを書くのはダメですよと理解しました。 (あってればいいんですが。。) 実際に、”ダウンロードしてやってみればいいじゃないか”という 回答になるかと思いますが現状は困難ですので申し訳ありませんが ご教示のほどよろしくお願いいたします。 (後々には、ダウンロードして確認する予定ですが、事前確認として 知っておきたく。)
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
# お使いの開発環境の情報も明記しましょう お使いの環境が VB6(またはVBA)などであれば --- sample.frm Sub Form_Load() ' Sample End Sub declare Function myFunc Lib "myFunc.dll" (ByVal nInt as Integer) as Long といったコードでは質問のようなエラーになるでしょう --- sample.frm Declare Function myFunc Lib "myFunc.dll" (ByVal nInt as Integer) as Long Sub Form_Load() ' Sample End Sub といった具合にコードの冒頭にDLL用の関数宣言などを移動してみましょう
その他の回答 (6)
- redfox63
- ベストアンサー率71% (1325/1856)
DLLの検索順はWinAPIのLoadLibraryに準じると思います 1 アプリケーションのロード元 2 カレントディレクトリ 3 Windowsのシステムディレクトリ 4 16ビット版のシステムディレクトリ 5 Windowsディレクトリ 6 環境変数Pathに記載されたディレクトリ といった順序になるようです
お礼
ご回答ありがとうございます。 参考にさせていただきます。
- redfox63
- ベストアンサー率71% (1325/1856)
シートモジュールなどに記述する場合は Private Declare Function ... といった具合に Privateを追加する必要があります 標準モジュールの場合は Declareで始めてもかまいません
お礼
ご回答ありがとうございます。 Private Declare Function ... で書き出しています。 その後の*** Lib "aaa.dll" (byVal... と記載しています。 このときのaaa.dllをファイルで持ってた場合 aaa.dllを置く場所はどこにおけば良いんでしょうか? プログラム上でaaa.dllで定義されているというふうな プログラムとしていますが、どこにそのファイルがあるかは マクロからは分からないと思うのですが、標準として ここに置きなさいという場所があるのでしょうか?
- redfox63
- ベストアンサー率71% (1325/1856)
> グローバル変数・・・ 意味合いは少し違いますが感覚的には同じですね VBE(VBAのエディタ)の ツール > オプション > 編集の 『ウィンドウの設定』> 『モジュール全体を連続表示』にチェックを入れておいて Declare宣言を冒頭に記述してみましょう コードウィンドウの コンボボックスの表示が 左側 (General) 右側(Declarations) と表示されてる部分でないとエラーになりますよ ^^
お礼
ご回答ありがとうございます。 コンパイルエラーになりました。 Declareステートメントはオブジェクトモジュールの パブリックメンバとして使用できませんといわれてしまいました。 Declare宣言が使えるのであれば、やはり環境による問題なのかも しれません。 土日は休日なので確認できませんが、確認できたらまた質問させて 頂きたくとりあえずありがとうございます。
- imogasi
- ベストアンサー率27% (4737/17069)
>”End Sub、End FunctionまたはEnd Property以降にはコメントのみが記述できます。” ここ(End XXXのあと)に記述した例をコピー貼り付けで補足した方が、質問としてわかりやすいのでは。 Sub,Function,Propertymのどれかでも始まる前の、最初の部分にDeclareを持ってきては。「宣言」は最初。 余り参考にはならないかも知れないが http://hp.vector.co.jp/authors/VA017912/api_decl.html http://www.jp-ia.com/_ans/file11.htm http://www.jp-ia.com/_ans/file11.htm
お礼
お礼が遅くなり申し訳ありません。 丁寧なご回答ありがとうございます。 ご指摘、ありがとうございます。 内容を見てもう少し考えてみます。 誠にありがとうございます。 また、どうしても分からないときに、整理して質問させて 頂きますのでその際はまたアドバイスをよろしくお願いいたします。
- うぃず(@Wizard_Zero)
- ベストアンサー率69% (344/495)
環境が分かりませんが、マクロとのことなのでExcel VBAと推測し、それを前提に回答します。 DLLがなければ「ファイルが見つかりません」というエラーになります。ただし、コンパイル時ではなく、その関数を使用したタイミングで表示されます。 Declare宣言を他のSub~End SubやFunction~End Functionのあとに記述したら、ご質問のエラーメッセージが表示されました。Declare宣言をコードの先頭以外に書いていないか確認してみてください。 > 実際には、サンプルコードがあるので書き写しなのですが 各箇所のコードがあっていても、記述する順序が異なればエラーが発生する可能性があります。
お礼
お礼が遅くなり申し訳ありません。 丁寧なご回答ありがとうございます。 環境は、ご推測のとおりエクセルVBAです。(説明不足ですみません) Sub~End Subの間に記載してるんですが、他に原因があるのかもしれません。。 もう少し整理してみます。
- uruz
- ベストアンサー率49% (417/840)
Declare文で指定したDLLが存在しなければエラーになるますけど
お礼
お礼が遅くなり申し訳ありません。 ご回答ありがとうございます。 エラーは、どのようなエラーでしょうか?
お礼
お礼が遅くなり申し訳ありません。 サンプルコードまで記載いただきご回答ありがとうございます。 使用環境の記載不足は誠に申し訳ありません。 使用言語はエクセルVBAです。 2番目のサンプルコードは記載してみましたがダメでした。 ちなみに、その記載はアリなんでしょうか? プログラムの開始は、Sub()~開始という思い込みがありまして。 グローバル変数の定義付けみたいな解釈で理解すればよいのでしょうか?