EXE起動時のDLLのロードについての質問 – プログラミング – Home

EXE起動時のDLLのロードについての...
 
通知
すべてクリア

EXE起動時のDLLのロードについての質問


TAKU
 TAKU
(@TAKU)
ゲスト
結合: 25年前
投稿: 1
Topic starter  

初めまして。
VC初心者です。
タイトルが~についてになってしまいましたがお許し下さい。
(日本語が苦手なので)

現在、あるゲームのDLLのソースを入手したので、
勉強してみようと思っています。
内容はCで書かれているのである程度は理解したのですが、
そのゲームは起動のオプションで、
使用するディレクトリを換えられるのですが、
(ディレクトリ毎にDLLが置かれています)
DLLをビルドすると、そのマシンでは
DLLの作成されたフォルダ配下のDLLをロードしてしまいます。
(ビルドしていないマシンでは問題無く動作します)
ゲームの実行ファイルから、ビルドする前のように動的にロードするには
どうすれば良いでしょうか。
初歩的な質問かもしれませんが、教えて頂けないでしょうか。
よろしくお願い致します。


引用解決済
トピックタグ
じゃぶろー
 じゃぶろー
(@じゃぶろー)
ゲスト
結合: 24年前
投稿: 8
 

よく内容がわからないのですが、
要するに指定パスのDLLを動的にロードしたい
ってことですよね?

「LoadLibrary」というAPIが用意されているので
その辺のライブラリを参照すれば特に問題なくできるのではないでしょうか?

簡単に書くと
typedef int (CALLBACK* DLL_FUNC)(long A);

int main()
{
HINSTANCE hDLL;
DLL_FUNC foo;

//DLLのマップ
hDLL = LoadLibrary(C:\hogehoge.dll);
if(!hDLL) return -1; //失敗

//アドレスの取得(hogehoge内foo_func関数)
foo = (DLL_FUNC)GetProcAddress(hDLL,_foo_func@4);
if(!foo) return -1; //失敗

//関数呼び出し
cout << foo(0) << endl;

//DLLマップ開放
FreeLibrary(hDLL);

return 0;
}

大まかにこんなもんですかね...


返信引用
じゃぶろー
 じゃぶろー
(@じゃぶろー)
ゲスト
結合: 24年前
投稿: 1
 

※実際問題

//アドレスの取得(hogehoge内foo_func関数)
foo = (DLL_FUNC)GetProcAddress(hDLL,_foo_func@4);
if(!foo) return -1; //失敗

はまずい
失敗したとき

if(!foo)
{
FreeLibrary(hDLL);
return -1; //失敗
}

です。

ちゃんと作るときは
try catch とか 括弧組み とかで もっとスマートに書くべきですね...
 


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました