wxWidgets: получение пути к приложению

Как можно получить путь к модулю?

Я пишу расширение, заключенное в DLL, и хочу получить путь к моей библиотеке во время выполнения.

Обновить

Конечно, первый способ работал нормально

static wxString GetModulePath()
{
    static wxString path;

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

    return wxPathOnly(path);
}

но, наконец, я закончил со вторым

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

person jonny    schedule 13.06.2009    source источник
comment
я просто ищу "правильный", "кроссплатформенный" способ   -  person jonny    schedule 13.06.2009
comment
Теперь, когда вы приняли первый ответ, я немного запутался в том, чего вы действительно хотите достичь: получить расположение расширения внутри хост-приложения? Получить расположение модуля расширения от самого себя после его загрузки? А если кроссплатформенный, то зачем принимать ответ с функцией Windows API?   -  person mghie    schedule 13.06.2009
comment
получить расположение модуля расширения от самого себя после его загрузки.   -  person jonny    schedule 13.06.2009
comment
Спасибо за голосование. Обратите внимание, что вам не нужен собственный экземпляр класса wxStandardPaths, вы можете просто написать wxStandardPaths::Get().GetPluginsDir(), чтобы использовать уникальный глобальный объект.   -  person mghie    schedule 13.06.2009


Ответы (3)


Взгляните на класс wxStandardPaths. Для вашей проблемы это GetExecutablePath() или GetPluginsDir() — я просто не уверен, что вы хотите сделать.

person mghie    schedule 13.06.2009
comment
Это как раз то, что я искал. Спасибо! - person jonny; 13.06.2009

я использовал

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

    IMPLEMENT_APP(dialogsApp);

    bool dialogsApp::OnInit()
    {

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

Кажется, это работает.

person Phil Headford    schedule 12.11.2012
comment
@ile: это не лишнее. Фил показывает, как именно это назвать. Мой +1. Незначительным улучшением будет только объединение двух последних строк в wxString xpath(wxStandardPaths::Get().GetExecutablePath());. - person pepr; 13.11.2012
comment
@ile: хорошо. Это была ваша мысль, что не означает, что все так думают. Если вы не знаете wx, может быть не так просто найти, как его вызвать. И извините, я был немного расстроен вашим поведением (моя вина). Кто вы такой, чтобы отдавать новичкам приказы типа убрать это? - person pepr; 14.11.2012

Это не специфично для wxWidgets. В Windows есть функция GetModuleFileName, которая делает то, что вам нужно. Ссылка на страницу msdn.

person Jere.Jones    schedule 13.06.2009
comment
И насколько это кроссплатформенно? - person Lauri Nurmi; 13.11.2012
comment
Нисколько. GetModuleFileName — это специфичный для Win32 API. - person Jere.Jones; 13.11.2012