在NodeJS插件中将args转换为double
我想将参数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]
有没有其他的节点方法? 如果我转换为string,然后通过C本机function将其转换为长我不会丢失数据,对不对? (我并不真正关心“数据丢失”,但我想摆脱这个警告)
你只需要从两倍到长。 你可以做
double d = args[0]->NumberValue(); long l = static_cast<long>(d);
至于丢失数据,如果您的输出值很高,则会丢失数据,但是您永远无法input足够大的数字( double
)来达到long
的上限。