動画作成ツール「Crystel Engine」ブログ

動画作成ツール「Crystel Engine」の開発日誌です。良かったら「CE」と略して下さい。現在はMAD動画を作るためのツールとして稼動中。MADデビューしたい方は、ぜひどうぞ!ロマンはどこだ!?を胸に日々開発中

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PageTop

ツールバー→デスクトップからアプリケーションを開くと失敗する問題解決

多分、これハマる人多いはず。

Crystel Engineはアプリケーションを起動すると言語ファイルとか
DLLを読み込ませて、起動します。
こうする事により、言語を変えたい際、アプリケーションは、そのままでDLLを変えるだけで
済み、バグを軽減させる事が可能です。

で・・・ツールバー→デスクトップから起動をすると
DLLを読み込むためのパスが上手く取得できなかったみたいです。

パスの取得は

GetCurrentDirectory( sizeof(m_CurrentDirectory)sizeof(TCHAR),m_CurrentDirectory )

この関数を使っていたのですが、これだとツールバー→デスクトップから起動すると
デスクトップのパスを取得され、DLLまでの正確なパスが取得できません
よって、DLLが読み込めなく起動に失敗していました。

これは関連付けで起動したり、ドラッグ&ドロップで起動する時も発生しました。
(まぁ、発生したおかげで対処できたのですが)

よって、デスクトップから起動されようが、関連付けで起動されようが、
プログラムがあるパスを取得しなくてはいけません。

んで、対処したコードは、こんな感じ。

// 起動時にすぐ呼びました。

// モジュールの名前を手に入れてパスを取得
TCHAR moduleStr[MAX_PATH+1];
GetModuleFileName(hInstance, moduleStr, MAX_PATH+1);
char *pt;
pt = _tcsrchr(moduleStr, _T('\\'));
*pt = _T('\0');
// そのパスをカレントディレクトリにセットする
SetCurrentDirectory(moduleStr);

http://www.kouteipenguin.net/annex/2007/08/win32api_70c7.html
PG's annexさん

のサイトでModuleまでのパスを見つける方法を発見して、
組み込みました。

関連付け起動なんて簡単だろう~と思って、やったんですが
4時間も掛かったよ!!掛かりすぎ。

PageTop

コメント


管理者にだけ表示を許可する
 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。