我最深切的道歉。该文件未复制到正确的目录中,因此无法读取。毕竟,扩展适用于所有Windows平台。这提醒您始终执行正确的错误处理。
直接问题:对于Chrome扩展程序中的FireBreath插件,我是否需要为FireBreath生成的.dll文件(需要正确的.js,.html和.json)上传多个文件?
大图: FireBreath生成.dll,我相信将此.dll文件加载到我使用chrome上传的Chrome扩展程序文件夹中:// extensions / unpacked就足够了。换句话说,我认为我不需要上传额外的C ++代码。调用 plugin.openUserIdFromFile()会生成我的错误。
成功:我使用NPAPI FireBreath插件将桌面用户名从文件加载到Chrome扩展程序。它适用于开发插件的Windows桌面。
失败: 在NPObject上调用方法时出错。在开发环境之外的所有Windows环境:XP,7或8上都收到错误。
已知:好友在其上运行http://www.dependencywalker.com/软件,发现IEShims.dll在他的环境中缺少依赖,但我将其包含在上传的文件夹中无济于事。
JavaScript Chrome扩展程序调用FireBreath插件dll:
$(document).ready(function () {
setInterval(getAllChromeTabs, 10000);
var plugin = document.getElementById("pluginId");
while (user.length < 1) {
user = plugin.openUserIdFromFile();
}
console.log(user);
});
从Chrome扩展程序调用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 :(得分:0)
对C ++的以下修改(插入if语句)修复了该函数。
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);