在 NodeJS 插件中将 args 转换为 double
Convert args to double in NodeJS addon
我想将参数 0 转换为 long,以便将其用于 dll 函数。
函数定义为long function(long)
long __stdcall VBVMR_GetVoicemeeterVersion(long * pVersion);
电话就像
void Voicemeeter_run(const FunctionCallbackInfo<Value>& args){
Isolate* isolate = Isolate::GetCurrent();
if (args.Length() < 1) {
isolate->ThrowException(Exception::TypeError(
String::NewFromUtf8(isolate, "Run needs 1 argument")));
return;
}
if (!args[0]->IsNumber()) {
isolate->ThrowException(Exception::TypeError(
String::NewFromUtf8(isolate, "Argument 1 must be a number")));
return;
}
long type = args[0]->NumberValue();
//long type = 2;
long value = iVMR.VBVMR_RunVoicemeeter(type);
Local<Number> num = Number::New(isolate, value);
args.GetReturnValue().Set(num);
}
我收到以下警告:
..\vm-wrapper.cc(101): warning C4244: 'argument' : conversion de 'double' en 'long', perte possible de données [D:\Workspace\node-voicemeter\build\vm-wrapper.vcxproj]
还有其他Node方法吗?如果我将 is 转换为字符串,然后通过 C 本机函数将其转换为 long,我不会丢失数据,对吗? (我不太关心 "data loss",但我想摆脱警告)
您只需要将 double 转换为 long。你可以做到
double d = args[0]->NumberValue();
long l = static_cast<long>(d);
至于丢失数据,如果你在输出上收到一个高值,你就会丢失数据,但是你永远不能在javascript(double
)中输入一个足够大的数字来达到上限long
.
我想将参数 0 转换为 long,以便将其用于 dll 函数。
函数定义为long function(long)
long __stdcall VBVMR_GetVoicemeeterVersion(long * pVersion);
电话就像
void Voicemeeter_run(const FunctionCallbackInfo<Value>& args){
Isolate* isolate = Isolate::GetCurrent();
if (args.Length() < 1) {
isolate->ThrowException(Exception::TypeError(
String::NewFromUtf8(isolate, "Run needs 1 argument")));
return;
}
if (!args[0]->IsNumber()) {
isolate->ThrowException(Exception::TypeError(
String::NewFromUtf8(isolate, "Argument 1 must be a number")));
return;
}
long type = args[0]->NumberValue();
//long type = 2;
long value = iVMR.VBVMR_RunVoicemeeter(type);
Local<Number> num = Number::New(isolate, value);
args.GetReturnValue().Set(num);
}
我收到以下警告:
..\vm-wrapper.cc(101): warning C4244: 'argument' : conversion de 'double' en 'long', perte possible de données [D:\Workspace\node-voicemeter\build\vm-wrapper.vcxproj]
还有其他Node方法吗?如果我将 is 转换为字符串,然后通过 C 本机函数将其转换为 long,我不会丢失数据,对吗? (我不太关心 "data loss",但我想摆脱警告)
您只需要将 double 转换为 long。你可以做到
double d = args[0]->NumberValue();
long l = static_cast<long>(d);
至于丢失数据,如果你在输出上收到一个高值,你就会丢失数据,但是你永远不能在javascript(double
)中输入一个足够大的数字来达到上限long
.