【问题标题】:wxWidgets: obtaining application pathwxWidgets:获取应用路径
【发布时间】:2009-06-13 17:55:55
【问题描述】:

如何获取模块路径?

我正在编写包含在 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());

【问题讨论】:

  • 我只是在寻找“正确”、“跨平台”的方式
  • 既然您已经接受了第一个答案,我对您真正想要实现的目标有点困惑:从主机应用程序内部获取扩展程序的位置?加载后从自身获取扩展模块的位置?如果是跨平台的,为什么要接受 Windows API 函数的答案?
  • 从自身获取扩展模块的位置,一旦它被加载。
  • 感谢您的支持。请注意,您不需要自己的 wxStandardPaths 类实例,只需编写“wxStandardPaths::Get().GetPluginsDir()”即可使用唯一的全局对象。

标签: wxwidgets filepath


【解决方案1】:

看看wxStandardPaths 类。对于您的问题,可以使用 GetExecutablePath()GetPluginsDir() 方法 - 我只是不确定您想做什么。

【讨论】:

  • 这正是我想要的。谢谢!
【解决方案2】:

我用过

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

    IMPLEMENT_APP(dialogsApp);

    bool dialogsApp::OnInit()
    {

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

这似乎行得通。

【讨论】:

  • @ile:这不是多余的。 Phil 展示了如何准确地调用它。我的+1。一个小的改进只是将最后两行加入wxString xpath(wxStandardPaths::Get().GetExecutablePath());
  • @ile:好的。这是你的想法,并不意味着每个人都这样想。如果一个人不知道 wx,可能很难找到如何调用它。对不起,你的行为让我有点不安(我的错)。你是谁给初学者下删除它之类的命令?
【解决方案3】:

这不是 wxWidgets 特定的。 Windows 有一个名为GetModuleFileName 的函数,可以满足您的需求。该链接指向 msdn 页面。

【讨论】:

  • 那到底有多跨平台?
  • 一点也不。 GetModuleFileName 是 Win32 特定的 api。
猜你喜欢
  • 2014-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
  • 2012-04-08
  • 1970-01-01
  • 2012-10-23
相关资源
最近更新 更多