2013-04-30 4 views
-1

깊은 사과드립니다. 파일이 올바른 디렉토리에 복사되지 않아 읽을 수 없습니다. 결국이 확장은 모든 Windows 플랫폼에서 작동합니다. 이는 항상 적절한 오류 처리를 수행하라는 알림입니다.크롬 확장 프로그램에 FireBreath 플러그인이 있습니다 ... 오류 : NPObject에서 메서드 호출 중 오류가 발생했습니다.

직선 질문 :은 (.html 중에서 적절한의 .js을 필요로하고, .json은 명백하다) 나는 FireBreath이 .dll 파일을 생성 이상을 업로드해야합니까 Chrome 확장 내에서 FireBreath 플러그인을 검색 하시나요?

큰 그림 : FireBreath는 .DLL를 생성하고 난 크롬을 사용하여 업로드 크롬 확장 프로그램 폴더에이 .dll 파일을로드 퍼팅 생각 : // 확장/압축 해제가 충분하다. 즉, 추가 C++ 코드를 업로드 할 필요가 없다고 생각합니다. plugin.openUserIdFromFile()을 호출하면 오류가 발생합니다.

성공 : NPAPI FireBreath 플러그인을 사용하여 파일의 데스크톱 사용자 이름을 Chrome 확장 프로그램에로드했습니다. 그것은 플러그인이 개발 된 Windows 바탕 화면에서 작동합니다.

오류 :NPObject에서 메서드를 호출하는 중 오류가 발생했습니다. 모든 Windows 환경에서 오류가 수신되었습니다 (개발 환경 외부의 XP, 7 또는 8). 알려진

: 대화 상대 그것에 http://www.dependencywalker.com/ 소프트웨어를 실행하고 IEShims.dll 자신의 환경에서 누락 된 의존성 것을 발견했다,하지만 난 아무 소용 업로드 폴더에 포함되어 있습니다.

자바 스크립트를 크롬 확장 프로그램은 FireBreath 플러그인 DLL로 호출을 :

$(document).ready(function() { 
    setInterval(getAllChromeTabs, 10000); 

    var plugin = document.getElementById("pluginId"); 

    while (user.length < 1) { 
     user = plugin.openUserIdFromFile(); 
    } 
    console.log(user); 
}); 

크롬 확장에서 호출 C++ FireBreath 플러그인 기능 :

std::string LabStatsPluginAPI::openUserIdFromFile() 
{ 
    std::string aTempFileName = "aTempFileName"; 

    DWORD nBufferLength = MAX_PATH; 
    LPTSTR lpBuffer = (new TCHAR[nBufferLength]); 
    DWORD tempPath = GetTempPath(nBufferLength, lpBuffer); 

    char* localTempPathArray = new char[nBufferLength]; 
    for (int i = 0; i < nBufferLength; i++) { 
     localTempPathArray[i] = (char)lpBuffer[i]; 
    } 
    std::string localTempPath(localTempPathArray); 
    localTempPath = localTempPath + aTempFileName; 

    std::ifstream streamFromFile; 
    std::ifstream::pos_type fileSize; 
    streamFromFile.open(localTempPath, std::ios::in|std::ios::binary|std::ios::ate); 

    char* userNameString; 
    int userNamesize = streamFromFile.tellg(); 
    streamFromFile.seekg(0, std::ios::beg); 
    userNameString = new char[userNamesize]; 
    streamFromFile.read(userNameString, userNamesize); 

    delete[] lpBuffer; 
    delete[] localTempPathArray; 

    std::string userNameSafeString(userNameString); 
    delete[] userNameString; 

    return userNameSafeString; 
} 

답변

0

는 C++에 다음 수정합니다 (있는 경우 문이 삽입 됨) 함수를 수정합니다.

char* userNameString; 
int userNamesize = streamFromFile.tellg(); 
if (userNamesize < 1) { 
    return ""; // no file found 
} 

streamFromFile.seekg(0, std::ios::beg); 
userNameString = new char[userNamesize]; 
streamFromFile.read(userNameString, userNamesize);