-1

我深表歉意。该文件未复制到正确的目录中,因此无法读取。毕竟,该扩展适用于所有 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;
}
4

1 回答 1

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);
于 2013-05-01T23:02:09.337 回答