2009-06-13 15 views
2

どのようにモジュールへのパスを取得できますか?wxWidgets:アプリケーションパスを取得

私はDLLで囲まれたエクステンションを書き、実行時に自分のライブラリへのパスを取得したいと考えています。

アップデートもちろん​​

最初の方法は、微

static wxString GetModulePath() 
{ 
    static wxString path; 

    WCHAR buf[512] = {0}; 
    GetModuleFileName(NULL, buf, 511); 
    path = buf; 

    return wxPathOnly(path); 
} 

を働いていたが、最終的に私は、第1

wxStandardPaths sp; 
wxLogError(sp.GetPluginsDir()); 
+0

私はちょうど「正しい」、「クロスプラットフォーム」の方法を探しています – jonny

+0

最初の回答を受け入れたので、私はあなたが本当に達成したいことについてちょっと混乱しています:ホストアプリケーション?一度ロードされると、拡張モジュールの位置を取得しますか?クロスプラットフォームの場合、なぜWindows API関数を使用して答えを受け入れるのですか? – mghie

+0

拡張モジュールがロードされると、拡張モジュールの位置を取得します。 – jonny

答えて

4

wxStandardPathsクラスをご覧ください。あなたの問題については、そのGetExecutablePath()またはGetPluginsDir()メソッドを使用することができます - 私はあなたが何をしたいのか分かりません。

+0

これはちょうど私が探していたものでした。ありがとう! – jonny

0

これはwxWidgetsの特定ではありませんで終わりました。 WindowsはGetModuleFileNameと呼ばれる機能を備えています。リンクはmsdnページにあります。

+0

そして、どのようにクロスプラットフォームであるのですか? –

+0

全くありません。 GetModuleFileNameはWin32固有のAPIです。 –

3

私は仕事に思われる

#include "wx/stdpaths.h" 
    #include "dialogsApp.h" 
    #include "dialogsMain.h" 

    IMPLEMENT_APP(dialogsApp); 

    bool dialogsApp::OnInit() 
    { 

     wxString xpath; 
     xpath = wxStandardPaths::Get().GetExecutablePath(); 

を使用。

+0

@ile:これは冗長ではありません。 Philはそれをどのように正確に呼び出すかを示します。私の+1。軽微な拡張は、最後の2行を 'wxString xpath(wxStandardPaths :: Get()。GetExecutablePath());'に結びつけるだけです。 – pepr

+0

@ile:OK。これは皆さんがそのように考えることを意味するものではありません。 wxがわからない場合は、それを呼び出す方法を見つけるのは簡単ではないかもしれません。そして、申し訳ありませんが、私はあなたの行動(私のせい)によって少し動揺していた。あなたは初心者に*それを取り除くような命令を与えるべきですか? – pepr