首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Firebreath中使用个人程序

在Firebreath中使用个人程序
EN

Stack Overflow用户
提问于 2012-03-25 13:02:29
回答 1查看 527关注 0票数 0

我正在构建一个使用Firebreath的插件。我在ABCPluginAPI.cpp中创建了一个名为exe_program()的个人方法,我想使用popen调用另一个名为my_program的程序。所有的文件都放到了firebreath/projects/ABCPlugin/中。

我的方法是:

代码语言:javascript
复制
string ABCPluginAPI::exe_program()
{
    FILE * pPipe;
    fd_set readfd;
    char buff[1024];
    char command[128];
    int ret;

    strcpy(command, "my_program");

    if (!(pPipe = popen(command, "r"))) {
         // Problem to execute the command
       return "failed";
    }
    while(fgets(buff, sizeof(buff), pPipe)!=NULL){
        cout << buff;
        return buff;
    }
}

我遇到的问题是插件没有运行my_program,实际上如果我执行pwd命令,它会显示我的$HOME目录。pwd之所以能工作,是因为它是一个通用命令,但我不想把我的程序放入$PATH变量中,因为这个插件必须是可移植的。

可能Firebreath使用了一个特殊的目录来引用这类文件或类似的文件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-26 23:04:35

您可能需要指定要运行的应用程序的完整路径和文件名;当前工作目录并不保证总是相同的值。

在firebreath.org的Tips and Tricks页面中,您可以将代码添加到PluginCore派生对象中,这些代码将为您提供插件文件的完整路径和文件名:

代码语言:javascript
复制
// From inside your Plugin class (that extends PluginCore)
std::string MyPlugin::getFilesystemPath()
{
    return m_filesystemPath;
}

您可以采用该路径,去掉最后一部分,并将其更改为您的可执行文件名;只要将可执行文件放在与您的插件相同的目录中,就可以很好地工作。或者,您也可以将其安装在其他一些众所周知的位置。

请注意,要从JSAPI对象调用主插件对象上的方法,应该在JSAPI对象上有一个辅助方法getPlugin() (如果您使用fbgen生成它):

代码语言:javascript
复制
std::string pluginPath = getPlugin()->getFilesystemPath();

希望这能有所帮助

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9858034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档