2

firebird データベースと mysql データベースの両方に接続するポータブル アプリケーションを作成しています。Delphi 2010 でアプリケーションを作成し、dbExpress コンポーネントを使用して両方のデータベースに接続しています。SQLconnection コンポーネントは、mysql データベースに dbxmys.dll と libmysql.dll を使用し、firebird データベースに dbxfb.dll と fbclient.dll を使用します。

私の開発用コンピューターでは、dll ファイルを /windows/system/ に移動する必要がありました。これは、正しいファイルを見つけて接続するためのシステム パスが原因だと思います。別のクライアント マシンでこれを試しましたが、dll ファイルが見つからなかったため、ソフトウェアは接続できませんでした。これは移植可能なアプリケーションであるため、dll ファイルを含めるためにアプリケーション ディレクトリのサブディレクトリを含めたくありませんが、mySQL と Firebird をインストールしてパスを正しく設定しなければ、クライアント マシンでアプリケーションを実行できないと思います。

これを行うより良い方法はありますか?サブディレクトリを作成し、アプリケーションがそこを参照するように強制することを検討しました (firebird と mySQL はどこにでもインストールできるため)。しかし、私は本当にこのアプローチをとりたくありません。

直接のデータベース接続、または dll 要件の問題の解決に関する私のオプションは何ですか。私は経験豊富なソフトウェア開発者ではありません。前もって感謝します。

更新: DLL は現在、exe と同じディレクトリにあり、アプリケーションは正常に起動します。私はまだdllを使いたくありません。dll を必要としないコンポーネントをいくつか見つけましたが、支払いも必要です。別の無料オプションを見つけることが理想的です。

4

1 に答える 1

1

できることは、.dll をメインの .exe 内に圧縮されたリソースとして保存し、それらをローカル フォルダー (たとえば、ローカルの「アプリケーション データ」) に展開して、そこからライブラリを実行することです。したがって、ファイルをシステム パスに配置する必要はなく (おそらく管理者権限で)、パス自体を変更する必要もありません。

そのため、.dll を .exe と一緒にコピーする必要はありません。.dll が既に利用可能な場合、アプリケーションはそれらを使用します。.exe フォルダーはライブラリ ファイルによって「汚染」されることはなく、ソフトウェアは引き続き自己インストールする可能性があります。別のコンピューターに .exe をコピーしても、その中に .dll が残っているので、すぐにインストールできます。隠しローカル フォルダ。

これは、たとえば、SynProject ツールがスペル チェックに Hunspell ライブラリを使用する方法です。この SO answerを参照してください。

于 2013-02-09T19:59:56.653 に答える