CGIの制作に取り組んだいます。デバッグ環境からdllファイルに移すときにデータベースの作成位置を変えたいと思います。exeファイルと同じ場所に自動生成する仕様でしたがdllだとsystemフォルダに変わってしまうので、何か方法はないかと考えています。
コンパイラの実行ファイルの出力先を得る方法やそれをpathに変換する方法を教えていただけないでしょうか。
質問はもっと具体的に
データベースを利用したIIS DLLを作っています。
データベース位置はFDConecctionからDATA.FDBとして同じディレクトリに作成しています。これでデバッグ環境は整っています。
dllを作ると呼び出すWindowsのファイルがSYSTEMディレクトリにあるので”データベースの作成場所”が同じくSYSTEMディレクトリとなってしまいます。
そこでこの解消のためにIDEから(作成する)実行ファイルの出力先情報を抜き出して、.\$(Platform)の情報を具体的な相対パスに直し、プロパティに放り込んでやる、ということをしたいと思っています。
自分で気づきましたがコンパイル時にはパスが決定しないのでこの案は否定ですね。
ParamStrなどで今日の間調べてみようと思います。
無事解決いたしました
var
t: string;
if (ExtractFileName(ParamStr(0)) = '???.dll') and
(FileExists(PbbsConnection.Params.Values['database']) = false) then
begin
t := ExtractFilePath(GetModuleName(HInstance)) + 'data.fdb';
PbbsConnection.Params.Values['database'] := t;
end;
このような例で実現できました。安全なコードかはまだわかりませんが解決といたします。
ご自分の世界に浸っていらっしゃるようですね.
書き込みの文章を読んでも,私には意味不明で支離滅裂な感じがします.
私にとってはエニグマ並みです.
艱難辛苦の末,私の現在の解読結果では,
もしかして,デバッグ (IDE からの実行) と EXE を直接起動した時とで処理を分岐したいのではと思っています.
私はチューリングのような頭脳はありませんので,このあたりが限界かと.
[827_デバッグ中の実行か EXE 実行かを判定]
http://mrxray.on.coocan.jp/Delphi/plSamples/827_IDEorEXE.htm
# エニグマ
# 第二次世界大戦中にドイツが使用していた暗号機,またはその暗号機で作成された暗号
> if (ExtractFileName(ParamStr(0)) = '???.dll') and
ParamStr(0) で取得した文字列が DLL の時ってあるんですか.
どんな場合なんでしょう.私は経験したことないです.
>ParamStr(0) で取得した文字列が DLL の時ってあるんですか.
文字列 --> パス名
のことです.
WebBrokerでCGIを作っているところです。CGIは複雑なものはApacheかISAPIのDLLで作成するように書かれてありましたので、移行を行っていたところです。
データベースファイルはC:\ProgramData\<vendorname>\<productname>とかに固定的においた方が
幸せになれるんじゃぁ?C:\ProgramDataの部分はTPath.GetPublicPathで取得ね。
ツイート | ![]() |