在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的上限。