我深表歉意。该文件未复制到正确的目录中,因此无法读取。毕竟,该扩展适用于所有 Windows 平台。这提醒您始终执行正确的错误处理。
直截了当的问题:我是否需要为 Chrome 扩展中的 FireBreath 插件上传比 FireBreath 生成的 .dll 文件更多的文件(需要适当的 .js、.html 和 .json 文件)?
大图: FireBreath 生成一个 .dll,我相信将这个 .dll 文件加载到我使用 chrome://extensions/ unpacked 上传的 Chrome 扩展文件夹中就足够了。换句话说,我认为我不需要上传额外的 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;
}