2012-03-25 2 views
0

Firebreath를 사용하여 플러그인을 구축 중입니다. 나는 ABCPluginAPI.cpp이라는 개인적인 방법을 exe_program()이라고 불렀고 나는 my_program이라는 popen을 사용하는 다른 프로그램을 호출하고 싶다. 모든 파일은 firebreath/projects/ABCPlugin /에 있습니다.Firebreath에서 개인 프로그램 사용

내 방법은 다음과 같습니다 플러그인 내가 pwd 명령을 실행 실제로 경우, my_program를 실행하지 않는 것을

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; 
    } 
} 

내가 가진 문제는, 내 $ HOME 디렉토리를 보여줍니다. pwd은 일반적인 명령이기 때문에 작동하지만이 프로그램은 이식성이 있어야하기 때문에 $ PATH 변수에 프로그램을 넣고 싶지 않습니다.

아마도 Firebreath는 이러한 종류의 파일 또는 이와 유사한 파일을 가리키는 특수 디렉토리를 사용합니다.

답변

1

실행하려는 응용 프로그램의 전체 경로와 파일 이름을 지정해야 할 수도 있습니다. 현재 작업 디렉토리는 항상 같은 값으로 지정되지 않습니다. 당신은 그 길을 갈 수

// From inside your Plugin class (that extends PluginCore) 
std::string MyPlugin::getFilesystemPath() 
{ 
    return m_filesystemPath; 
} 

: firebreath.org의 Tips and Tricks 페이지에서

는 당신에게 당신의 플러그인 파일의 전체 경로와 파일 이름을 줄 것이다 당신이 당신의 PluginCore 파생 개체에 추가 할 수있는 코드가 마지막 부분을 없애고 실행 파일 이름으로 변경하십시오. 실행 파일을 플러그인과 동일한 디렉토리에두면 정상적으로 작동합니다. 또는 다른 잘 알려진 위치에 설치할 수도 있습니다.

std::string pluginPath = getPlugin()->getFilesystemPath(); 

희망을 (당신이 그것을 생성하는 fbgen를 사용하는 경우) JSAPI 객체에서 주요 플러그인 객체의 메소드를 호출하는

참고하여 JSAPI 개체의 도우미 방법 getPlugin을()이 있어야한다 그게 도움이

+0

답해 주셔서 감사합니다. 내가 집에 갈 때 나는 그것을 시험 할 것이다. –

+0

pluginPath는'$ HOME/Documents/firebreath/build/bin/ABCPlugin'을 보여주었습니다. 실행 파일을 거기에두고 호출했지만 작동하지 않았습니다. 사실 나는 그 폴더에서 실행 파일을 pwd로 시도하지만 작동하지 않았다. ./pwd와 함께 절대 경로 $ HOME/Documents/firebreath/build/bin/ABCPlugin/pwd를 사용하여 전화를 걸었습니다. 도와 주셔서 감사합니다. –

+0

콘솔 창 및/또는 -g 옵션 (디버거에 넣기 위해)에서 firefox를 시작하십시오. 콘솔에서 그리고 확실히 w/-g를 사용하면 stdout 출력을 얻어야합니다. 따라서 오류 메시지를 발견 할 수 있습니다. – taxilian