【问题标题】:How to cast v8::value to LPCSTR如何将 v8::value 转换为 LPCSTR
【发布时间】:2021-05-26 09:28:17
【问题描述】:

我正在尝试添加一个节点并复制一些 C++ 代码。一行给我一个错误

    void Attach(const FunctionCallbackInfo <Value> &args) {
        Isolate *isolate = args.GetIsolate();

        HWND target = FindWindowA(NULL, args[0]);

    ...

javascript的用法是

    const title = window.getTitle();

    const attach = addon.attach(title)

其中 'window' 是来自 electron 的 BrowserWindow 的一个实例

有错误

'HWND FindWindowA(LPCSTR,LPCSTR)': cannot convert argument 2 from 'v8::Local<v8::Value>' to 'LPCSTR'

我确实了解强制转换,但我对 Windows、C++ 的理解/经验非常有限,这是我第一次尝试使用插件。

我在这里找到了答案 Convert v8::String to LPCWSTR?,但我无法理解它。

【问题讨论】:

  • 我建议你添加一些代码来澄清args的上下文
  • @AndreasDM 添加了函数的开头,说实话我什至不知道什么是隔离或 GetIsolate() 做什么,但我确实测试并知道 args[0] 确实成立我使用 args.GetReturnValue().Set(args[0]); 时所期望的值

标签: c++ node.js


【解决方案1】:

我在法语论坛https://zestedesavoir.com/forums/sujet/13978/c-probleme-de-conversion-de-type-stringchar/找到了解决方案。

        Isolate *isolate = args.GetIsolate();

        Local<Context> context = isolate->GetCurrentContext();

        Local<String> appName = args[0].As<String>();

        CHAR* charAppName = new CHAR[128];

        (*appName)->WriteUtf8(isolate, charAppName);

        HWND target = FindWindowA(NULL, charAppName);

这使我可以毫无错误地进行编译,并且插件可以按预期工作。虽然我完全不明白每一行在做什么。

【讨论】:

    猜你喜欢
    • 2011-07-23
    • 2010-11-15
    • 2020-03-17
    • 2011-12-24
    • 2013-11-05
    • 2013-09-04
    • 2012-07-26
    • 1970-01-01
    • 2015-08-12
    相关资源
    最近更新 更多