2012-06-21 1 views
2

그래서 내가 런타임에서 함수 인수로 문자열 값을 전달 해요 :v8 :: string을 LPCWSTR로 변환 하시겠습니까?

Handle<Value> xObj::Whatever(const Arguments& args){ ... // etc. 

args[0] 확실히 문자열이어야한다 : 이제 우리가 가지고

 if(!args[0]->IsString()) { ThrowException(... // etc. 

, 어떻게 유용한 무언가로 변환 할 LPCWSTR, wchar_t, char [] 또는 무엇이든간에?

 MessageBox(NULL, args[0], L"Your value, sir.",0); // no way 
     MessageBox(NULL, args[0]->ToString(), L"Your value, sir.",0); // also no 
     /// then how? 
+0

'GetExternalStringResource()'메소드는'ExternalStringResource'를 리턴한다. 반환 된 문자열 리소스에서'data()'를 호출하여'const char *'를 얻을 수 있습니다. 문자열 리소스로 작업하기 전에'IsExternal'이 true인지, 즉'data()'멤버를 호출하는지 확인하십시오. 또는 넓은 문자열이 필요합니까? – dirkgently

+0

넓은 문자열로 변환하려면 A2W 매크로와 같은 것을 사용할 수 있습니다. –

+0

@dirkgently 그것은'const uint16_t * :: ExternalStringResource :: data()'입니다. 어떻게해야합니까? –

답변

2

v8::String::Value(args[0])는 하나, 또는 LPCWSTR으로 주조 될 수 uint16_t const*로 주조 될 수있다. (이것은 컴파일러 설정 /Zc:wchar_t-에 달려있다)

+0

'LPCWSTR msg = (LPCWSTR) * 문자열 :: 값 (args [0] -> ToString()); MessageBox (NULL, msg, L "Your value, sir.", 0);는 UTF-8로 인코딩 된 문자열의 처음 몇 글자를 엉망으로 만든다. –

+0

UTF-8 문자가 없어야합니까? 'LPCWSTR'의 W는 Wide (UTF-16)의 약자입니다. – MSalters

+0

'String :: Utf8Value' 및'MultiByteToWideChar()'와 함께 동작했습니다. –