HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0430
さいけ【実行ファイルと同一パス】以外からのdll読み込み4解決


さいけ

リンク

2009/4/30(Thu) 17:51:41|NO.24888

拡張dllを利用したソフトを作成しています。
フォルダをすっきりさせるために、下のような構成を考えています。

[メインフォルダ]
 |
 + main.exe
 |
 +--/[lib]
   |
   + lib_a.dll
   + lib_b.dll

ここで、main.exeから#uselib関数を使ってdllのロードを
試みたのですが、エラーで失敗してしまいます。
●失敗例1
#uselib "\\lib\\lib_a.dll"
 → #error38 外部dllの呼び出しに失敗しました。

●失敗例2
#define FILENAME dir_cur + "\\lib\\lib_a.dll"
#uselib FILENAME
 → #error22 プリプロセッサは文字列のみ受け付けます。

いずれも、フォルダ構成通りにファイルを配置しています。
# 実行ファイルと同じフォルダ以下に[lib]フォルダを作り、
# dllをその中に入れています。

絶対にやらなければならないことではありませんが、
「コープスパーティー BloodCovered」などで、
実際に行われている処理なので、やること自体は可能なはずです。

「【実行ファイルと同一パス】以外からのdll読み込み」
方法をご存じの方、ご教授いただけるとありがたいです。



この記事に返信する


inovia

リンク

2009/4/30(Thu) 18:08:05|NO.24890


#uselib "lib\\lib_a.dll"
\\を頭につけなければOKかな?



β-1 @abs

リンク

2009/4/30(Thu) 18:51:35|NO.24891

方法は3種類ほどあります

#uselib "lib\\lib_a.dll" #uselib ".\\lib\\lib_a.dll" #uselib "lib_a.dll" chdir "lib"



SYAM

リンク

2009/4/30(Thu) 18:56:18|NO.24892

ちょっと補足:
ドライブ名("c:"とか)で始まるパスは絶対パス、つまりカレントドライブ、カレントフォルダに関係なく確実に特定のフォルダを指し示します。
\ で始まるパスは絶対パスですが、カレントフォルダに関係なく、カレントドライブのルートフォルダからのフォルダ階層構造でフォルダを示します。
\ で始まらないパスは相対パス、つまりカレントフォルダから見た相対的なフォルダ階層構造でフォルダを示します。

これを踏まえると、失敗例1のパスがどこを指してしまっていたのか解ると思います。



さいけ

リンク

2009/5/1(Fri) 20:55:16|NO.24916

みなさま
対処法ありがとうございます。
無事解決しました。
絶対パス、相対パスの考え方は分かっているつもりでしたが、
実際に指摘されて、間違いに気づきました。お恥ずかしい。。

dir_curで取得できるパスが「c:hoge\var」と、「\」なしなので、
「頭に「\」を付けないとファイル参照ができない」という
先入観があったようです。気をつけます。勉強になりました。



ONION software Copyright 1997-2023(c) All rights reserved.