¥È¥Ã¥× Äɵ­

ÅÅÇÈÆüµ­ tDiary Edition

°ÊÁ°¤ÎÆüµ­¤Ï¤³¤Á¤é¤«¤é¡£
2004|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|12|
2008|01|02|03|04|05|11|
2009|01|02|
Á° 2010ǯ
9·î
¼¡
Æü ·î ²Ð ¿å ÌÚ ¶â ÅÚ
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Site Syndication: [RSS] [LIRS]
Access Counter: Overall 299171 / Yesterday 198 / Today 38

ToDo:

  • 99 ¸¦µæ¡Á
  • 80 meeting coordinator
  • 70 ¥Ð¥¤¥È
  • 20 ICPC OB/OG ²ñ¤Î¥¹¥¿¥Ã¥ÕÊýÌÌ
  • ·î¿ª´Ø·¸?

Categories | C++ | Coq | Haskell | ICPC | PC | TV | sendmail | spam | ¤ªÃΤ餻 | ¤½¤Î¾ | ¥¢¥ë¥Ð¥à | ¥µ¡¼¥Ð´ÉÍý | ¥»¥­¥å¥ê¥Æ¥£ | ¥Ë¥å¡¼¥¹ | ¥á¥â | ³Ø¹» | µ»½Ñ | »Å»ö | ¼ñÌ£ | ¿© | Æüµ­ | Ë¿ÊýÌÌ | ËÜ | ÌÖ | ι


2009/02/09 (Mon)

¡û [µ»½Ñ][C++] V8 ¤«¤é OLE ¥ª¡¼¥È¥á¡¼¥·¥ç¥ó

¤»¤Ã¤«¤¯¥¢¥×¥ê¤Ø¤ÎÁȤ߹þ¤ßÁ°Äó¤Ê¤Î¤À¤«¤é¡¢OS ¤Î¥Í¥¤¥Æ¥£¥Ö¤Êµ¡Ç½¤ò»È¤Ã¤Æ¤ß¤¿¤¯¤Ê¤ë¤Î¤¬¿Í¾ð¤È¤¤¤¦¤â¤Î¡Ä¡£

¤È¤¤¤¦¤ï¤±¤Ç¡¢ºÇ¶á¤Ï OLE ¥ª¡¼¥È¥á¡¼¥·¥ç¥ó¤ËÂбþ¤·¤¿¥ª¥Ö¥¸¥§¥¯¥È¤ò Javascript ¤«¤é¤¤¤¸¤ë¤¿¤á¤Ë¤´¤½¤´¤½¤ä¤Ã¤Æ¤Þ¤¹¡£¤³¤ì¤¬¤Ç¤­¤ë¤È Ajax ¤Î¥³¥¢µ¡Ç½¤¬¥¢¥×¥ê¤ËÁȤ߹þ¤á¤¿¤ê¤·¤Æ¡£

¡û ¤Þ¤À¼ÂÁõ¤¬Å¬Åö¤Ê¤È¤³¤í¤¬¤¢¤Ã¤¿¤ê¤¹¤ë¤Î¤Ç¤¹¤¬¡¢¤½¤Î¤¦¤Á¥³¡¼¥É¤Ï¤Þ¤È¤á¤Æ¸ø³«¤·¤Þ¤¹¤ë¡£

ËÜÆü¤Î¥ê¥ó¥¯¸µ | 199 | 88 | 75 | 67 | 65 | 61 | 60 | 56 | 55 | 48 | TrackBack(0)

2009/01/25 (Sun)

¡û [Æüµ­][¤ªÃΤ餻] ¤Ï¤Æ¤Ê¡¢¤Ï¤¸¤á¤Þ¤·¤¿

¤Ï¤Æ¤Ê¥À¥¤¥¢¥ê¡¼¡¢¤Ä¤¯¤Ã¤Æ¤ß¤Þ¤·¤¿¡£¢ªÅÅÇÈÆüµ­¡÷¤Ï¤Æ¤Ê

¡û ¤É¤¦¤âÀ¸¤Î tdiary ¤Ï¥³¡¼¥É¤¬½ñ¤­¤Ë¤¯¤¤¤Ê¡¼¤È»×¤Ã¤Æ¤¤¤¿¤Î¤Ç¤¹¤¬¡¢¡ÖWiki ¥¹¥¿¥¤¥ë¤Ë¤·¤Æ¤ß¤¿¤é¡©¡×¤È¶µ¤¨¤Æ¤¤¤¿¤À¤­¤Þ¤·¤¿¡£

¤·¤«¤·¥¹¥¿¥¤¥ë¤òÊѤ¨¤ë¤Ë¤ª¤¤¤Æ¡¢´û¸¥³¥ó¥Æ¥ó¥Ä¤Î°Ü¹Ô¤ò¹Í¤¨¤ë¤Î¤¬·ë¹½Æñ¤·¤¤¤«¤â¤·¤ì¤Ê¤¤¤Ê¤È¤¤¤¦¤Î¤â¤¢¤ë¤Î¤Ç¡¢¤È¤ê¤¢¤¨¤º¤ÏÊ̤ξì½ê¤ËÀßÄꤷ¤ÆÊÂ¹ÔÆ°ºî¡Ä¤Ê´¶¤¸¤ÇÍͻҤò¸«¤ë¤Î¤¬¤è¤µ¤½¤¦¤Ç¤¹¡£

¤¿¤À¤µ¤·¤¢¤¿¤Ã¤Æ¡¢¤Ï¤Æ¤Ê¤Î(¥³¡¼¥É¤Ê¤É¤Ë´Ø¤¹¤ë)»È¤¤¾¡¼ê¤¬¤ï¤ê¤È¤è¤µ¤½¤¦¤Ê¤³¤È¤â¤¢¤ë¤Î¤Ç¡¢¤·¤Ð¤é¤¯¤½¤Á¤é¤Ë¼´Â­¤ò¤ª¤¤¤Æ»î¤·¤Æ¤ß¤è¤¦¤È»×¤¤¤Þ¤¹¡£

ËÜÆü¤Î¥ê¥ó¥¯¸µ | 16 | 9 | 4 | 3 | 3 | 3 | 3 | 2 | 2 | 2 | TrackBack(0)

2009/01/21 (Wed)

¡û [µ»½Ñ][C++] C++ ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò Javascript(V8) ¤Ë¥¨¥¯¥¹¥Ý¡¼¥È¤¹¤ë

¤È¤ê¤¢¤¨¤º¥á¥â¤È¤·¤Æ¡£

´ðËÜŪ¤Ë¡¢´Ø¿ô¤ò FunctionTemplate ¤Ë¥³¡¼¥ë¥Ð¥Ã¥¯¤È¤·¤ÆÀßÄꤹ¤ë¤³¤È¤Ç¡¢Javascript ¤«¤é¸Æ¤Ó½Ð¤»¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£¤¿¤È¤¨¤Ð Hello, World! ¤¹¤ë´Ø¿ô¤Ï¼¡¤Î¤è¤¦¤Ê´¶¤¸¤Ë¡£

 static v8::Handle<v8::Value> Hello(const v8::Arguments& args)
 {
   printf("Hello, World!\n");
 }

¡û ¤Ç¡¢¤³¤ì¤ò Javascript ¦¤«¤é¥¢¥¯¥»¥¹¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Ë¡¢¥°¥í¡¼¥Ð¥ë¥ª¥Ö¥¸¥§¥¯¥È¤Î¥×¥í¥Ñ¥Æ¥£¤È¤·¤ÆÀßÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£

¤½¤Î¤¿¤á¤Ë¤Ï¡¢¥³¥ó¥Æ¥¯¥¹¥ÈÀ¸À®Éô¤Ç¼¡¤Î¤è¤¦¤Ê¥³¡¼¥É¤òµ­½Ò¤·¤Þ¤¹¡£

 v8::Local<v8::ObjectTemplate> global = v8::ObjectTemplate::New();
 global->Set(v8::String::New("hello"), v8::FunctionTemplate::New(Hello));
 
 v8::Persistent<v8::Context> context = v8::Context::New(NULL, global);
 ...

¡û ¤³¤Î¤Ø¤ó¤Þ¤Ç¤Ï Embedder's Guide ¤Î¤È¤ª¤ê¡£¥°¥í¡¼¥Ð¥ë´Ø¿ô¤Ê¤é¤³¤ì¤Ç OK ¤Ç¤·¤ç¤¦¡£

¡û ¤µ¤Æ¡¢¤³¤ì¤ò¤Õ¤Þ¤¨¤Æ¡£

¤³¤³¤«¤é¤Ï¡¢C++ ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤ò Javascript ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ë´ØÏ¢ÉÕ¤±¤ëÊýË¡¤ò°·¤¤¤Þ¤¹¡£¤¿¤È¤¨¤Ð²¼µ­¤Î¤è¤¦¤Ê¥¯¥é¥¹ Counter ¤¬¤¢¤Ã¤¿¤È¤·¤Þ¤·¤ç¤¦¡£

 class Counter {
 public:
   explicit Counter(int initialCount = 0) { ... };
   int GetCount() const { ... };
   void SetCount(int newValue) { ... };
   void Add(int amount = 1) { ... };
 };

¡û ¤Þ¤º¤Ï Javascript ¤«¤é¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¥³¡¼¥É¤ò½ñ¤­¤Þ¤¹¡£

¥³¥ó¥¹¥È¥é¥¯¥¿¤È this ¤Î¼èÆÀ¤¬´Î¡£

 struct CounterJSIF {
 private:
   // this ¤Ø¤Î¥¢¥¯¥»¥¹¥Ø¥ë¥Ñ
   static Counter* GetThis(v8::Local<v8::Value> handle)
   {
      void* pThis = v8::Local<v8::External>::Cast(handle->GetInternalField(0))->Value();
      return static_cast<Counter*>(pThis);
   }
 
   // ¥¯¥é¥¹¥³¥ó¥¹¥È¥é¥¯¥¿
   static v8::Local<v8::Value> New(const v8::ArgumentInfo& args)
   {
     Counter* backend = NULL;
     if (args.Length() > 0) {
       backend = new Counter(args[0]->Int32Value());
     } else {
       backend = new Counter();
     }
     
     // internal field ¤Ë¥Ð¥Ã¥¯¥¨¥ó¥É¥ª¥Ö¥¸¥§¥¯¥È¤òÀßÄê
     v8::Local<v8::Object> thisObject = args.This();
     thisObject->SetInternalField(0, v8::External::New(backend));
     
     // JS ¥ª¥Ö¥¸¥§¥¯¥È¤¬ GC ¤µ¤ì¤ë¤È¤­¤Ë¥Ç¥¹¥È¥é¥¯¥¿¤¬¸Æ¤Ð¤ì¤ë¤ª¤Þ¤¸¤Ê¤¤
     v8::Persistent<v8::Object> objectHolder = v8::Persistent<v8::Object>::New(thisObject);
     objectHolder.MakeWeak(backend, CounterJSIF::Dispose);
     
     // ¥³¥ó¥¹¥È¥é¥¯¥¿¤Ï this ¤òÊÖ¤¹¤³¤È¡£
     return thisObject;
   }
 
   // ¥¯¥é¥¹¥Ç¥¹¥È¥é¥¯¥¿
   static void Dispose(v8::Persistent<v8::Value> handle, void* pVoid)
   {
     delete static_cast<Counter*>(pVoid);
   }
 
   ///// ¥×¥í¥Ñ¥Æ¥£¥¢¥¯¥»¥µ /////
 
   static v8::Local<v8::Value> GetCount(v8::Local<v8::String> propertyName,
       const v8::AccessorInfo& info)
    {
      const Counter* backend = GetThis(info.Holder());
      return v8::Integer::New(backend->GetCount());
    }
 
   static void SetCount(v8::Local<v8::String> propertyName, v8::Local<v8::Value> value,
       const v8::AccessorInfo& info)
   {
     Counter* backend = GetThis(info.Holder());
     backend->SetCount(value->Int32Value());
   }
 
   ///// ¥á¥½¥Ã¥É¥³¡¼¥ë¥Ð¥Ã¥¯ /////
 
   static v8::Local<v8::Value> Add(const v8::Arguments& args)
   {
     Counter* backend = GetThis(args.This());
     if (args.Length() > 0) {
       backend->Add(args[0]->Int32Value());
     } else {
       backend->Add();
     }
     return v8::Undefined();
   }
 
 public:
   // ¥¯¥é¥¹¥Æ¥ó¥×¥ì¡¼¥È¤Î½é´ü²½
   void InitializeClass(v8::Local<v8::ObjectTemplate> global)
   {
     // ¥³¥ó¥¹¥È¥é¥¯¥¿¤òºîÀ®
     v8::Local<v8::FunctionTemplate> tmpl = v8::FunctionTemplate::New(ConterJSIF::New);
     tmpl->SetClassName(v8::String::New("Counter"));
     
     // ¥Õ¥£¡¼¥ë¥É¤Ê¤É¤Ï¤³¤Á¤é¤Ë
     v8::Local<v8::ObjectTemplate> inst = tmpl->InstanceTemplate();
     inst->SetInternalFieldCount(1);
     inst->SetAccessor(v8::String::New("count"), CounterJSIF::GetCount, CounterJSIF::SetCount);
     
     // ¥á¥½¥Ã¥É¤Ï¤³¤Á¤é¤Ë
     v8::Local<v8::ObjectTemplate> proto = tmpl->PrototypeTemplate();
     proto->Set(v8::String::New("add"), FunctionTemplate::New(CounterJSIF::Add));
     
     // ¥°¥í¡¼¥Ð¥ë¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥¯¥é¥¹¤òÄêµÁ
     global->Set(v8::string::New("Counter"), tmpl);
   }
 } counterInterface;

¡û ¥¯¥é¥¹¤¬Ã±¤Ë¥³¥ó¥¹¥È¥é¥¯¥¿´Ø¿ô¤ò¥³¡¼¥ë¥Ð¥Ã¥¯¤È¤¹¤ë FunctionTemplate ¤Ç¤¢¤ë¤È¤¤¤¦¤Î¤Ï¡¢Javascript ¤Ë¤ª¤±¤ë¥ª¥Ö¥¸¥§¥¯¥È»Ø¸þ¥×¥í¥°¥é¥ß¥ó¥°¤ÎºîË¡(?)¤òÃΤäƤ¤¤ë¤È¤ª¤½¤é¤¯¤¹¤ó¤Ê¤ê¤È¼õ¤±Æþ¤ì¤é¤ì¤ë¤«¤È»×¤¤¤Þ¤¹¡£

¤Þ¤¿¡¢internal field ¤È¤·¤Æ C++ ¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÅϤ¹¤È¤¤¤¦¤ä¤êÊý¤Ï Embedder's Guide ¤Ë¤¢¤ëÄ̤ê¤Ç¤¹¡£¥³¥ó¥¹¥È¥é¥¯¥¿¤Ç internal field ¤òÀßÄꤷ¡¢¥×¥í¥Ñ¥Æ¥£¥¢¥¯¥»¥µ¤ä¥á¥½¥Ã¥É¥³¡¼¥ë¥Ð¥Ã¥¯¤Ç¤Ï¤½¤ì¤òÆÉ¤ß½Ð¤·¤Æ¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥¢¥¯¥»¥¹¤·¤Þ¤¹¡£*1

¡û ¥ª¥Ö¥¸¥§¥¯¥È¤¬ GC ¤µ¤ì¤ë¤È¤­¤Ë°ì½ï¤Ë¥Ç¥¹¥È¥é¥¯¥È¤µ¤»¤ë¤Ë¤Ï¡¢weak reference ¤òÍøÍѤ·¤Þ¤¹¡£V8 ¤Î (persistent) handle ¤ò weak ¤Ë¤¹¤ë¤È¤­¤Ë GC ¥³¡¼¥ë¥Ð¥Ã¥¯¤ò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¡¢¤½¤³¤Ç¥ª¥Ö¥¸¥§¥¯¥È¤ò¥Ç¥¹¥È¥é¥¯¥È¤¹¤ì¤Ð OK ¤Ç¤¹¡£V8 ¤Î src/api.cc ¤Ë¤¢¤ë ExternalString ´Ø·¸¤Î API ¤Ç¤³¤ÎÊýË¡¤òÍøÍѤ·¤Æ¤¤¤ë¤Î¤Ç¡¢¶½Ì£¤Î¤¢¤ëÊý¤Ï»²¾È¤ò¡£

°ìÊý¡¢¥Ð¥Ã¥¯¥¨¥ó¥É¥ª¥Ö¥¸¥§¥¯¥È¤¬Â礭¤¤Åù¡¢GC ¤Þ¤ÇÂÔ¤¿¤º¤Ë¥á¥â¥ê¾ÃÈñ¤òÍÞ¤¨¤¿¤¤¾ì¹ç¡¢¤Ä¤Þ¤ê¥ª¥Ö¥¸¥§¥¯¥È¤òÌÀ¼¨Åª¤Ë²òÊü¤·¤¿¤¤¾ì¹ç¤Ï¡¢dispose ¤Ê¤É¤Î¥á¥½¥Ã¥É¤òÄêµÁ¤¹¤ì¤Ð¤è¤¤¤Ç¤·¤ç¤¦¡£

*1 ¥³¡¼¥ë¥Ð¥Ã¥¯¤Ë(void* ¤Ê¤É¤Î)¥Ñ¥é¥á¡¼¥¿¤òÅϤ»¤ì¤Ð³Ú¥Á¥ó¡Ä¤È»×¤¦¤«¤â¤·¤ì¤Þ¤»¤ó¤¬¡¢»Äǰ¤Ê¤¬¤é¤½¤¦¤¤¤Ã¤¿¥Ñ¥é¥á¡¼¥¿¤Ï¥·¥°¥Í¥Á¥ã¤Ë¤¢¤ê¤Þ¤»¤ó¡£¤Þ¤¿¡¢¥³¡¼¥ë¥Ð¥Ã¥¯¤Ï¥³¥ó¥¹¥È¥é¥¯¥¿¤ÇÀßÄꤷ¤Æ¤¤¤ë¤ï¤±¤Ç¤Ï¤Ê¤¤¤Î¤Ç¥¤¥ó¥¹¥¿¥ó¥¹¥Ñ¥é¥á¡¼¥¿¤ò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¡£

ËÜÆü¤Î¥ê¥ó¥¯¸µ | 8 | 4 | 2 | 2 | 2 | 1 | 1 | 1 | 1 | 1 | TrackBack(0)

2008/11/11 (Tue)

¡û [µ»½Ñ][C++] V8 ¤Èʸ»ú¥³¡¼¥É¡¢¤¢¤ë¤¤¤Ï ATL ¤Ë¤è¤ëʸ»ú¥³¡¼¥ÉÊÑ´¹

¤È¤ê¤¢¤¨¤º V8 ¥¨¥ó¥¸¥ó¤Î¾å¤Ç JavaScript ¤¬Æ°¤«¤»¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¤¬¡¢ÆüËܸì¤Ê¤É¤ò°·¤¤¤¿¤¯»×¤¦¤Î¤Ï»ê¶ËÅöÁ³¤À¤È»×¤¤¤Þ¤¹¡£

´ðËÜŪ¤Ë V8 ¤Îʸ»úÎó·¿(v8::String)¤Ï¡¢ASCII, UTF-8, UTF-16 ¤Ë¤è¤ëÆþ½ÐÎÏ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£ASCII ¤È UTF-8 ¤Ï¤É¤Á¤é¤â char**1¡¢UTF-16 ¤Ï uint16_t* ¤È¤¤¤¦·¿¤Î¥Ç¡¼¥¿¤Ç°·¤ï¤ì¤Þ¤¹¡£

UTF-16 ¤ÏÍפ¹¤ë¤Ë Windows ¤Ë¤ª¤¤¤Æ¤Ï¥ï¥¤¥Éʸ»ú(Unicode)¤È¤·¤Æ°·¤ï¤ì¤ë¤â¤Î¤Ç¤¹¡£¤¿¤À¤·¡¢Windows ¤Ç¤Ïʸ»úÎó¤Î·¿¤¬ LPWSTR¡¢¤Ä¤Þ¤ê¤Ï wchar_t* ¤ÈÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢ÌÀ¼¨Åª¤Ê·¿ÊÑ´¹¤¬É¬Íפˤʤ뤳¤È¤ËÃí°Õ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£

¡û ¤Á¤ç¤Ã¤ÈÏäÏÊѤï¤ê¤Þ¤¹¤¬¡¢°ìÈÌ¤Ë Visual C++ ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ç¤Ï¡¢¥Þ¥ë¥Á¥Ð¥¤¥Èʸ»ú¥»¥Ã¥È¤È Unicode ʸ»ú¥»¥Ã¥È¤ò¥×¥í¥¸¥§¥¯¥È¥ª¥×¥·¥ç¥ó¤ÇÀÚ¤êÂØ¤¨¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤³¤È¤¬¤è¤¯¤¢¤ê¤Þ¤¹¡£

¤³¤Î¤È¤­¥³¥ó¥Ñ¥¤¥ë¥¹¥¤¥Ã¥Á¤À¤±¤ÇÀÚ¤êÂØ¤¨¤¬¤Ç¤­¤ë¤è¤¦¤Ë¡¢Ê¸»ú·¿¡¦Ê¸»úÎ󷿤Ȥ·¤Æ¤½¤ì¤¾¤ì TCHAR¡¦LPTSTR ¤òÍѤ¤¡¢Ê¸»úÎó¥ê¥Æ¥é¥ë¤Î²ó¤ê¤ò _T ¥Þ¥¯¥í¤Ç¶´¤ó¤À¤ê¤¹¤ë¤³¤È¤Ç¡¢Æ±¤¸¥³¡¼¥É¤ò¤¤¤º¤ì¤Î¥±¡¼¥¹¤Ç¤â»È¤¤¤Þ¤ï¤»¤ë¤è¤¦¤Ë¤¹¤ë¼êË¡¤¬¤È¤é¤ì¤Þ¤¹¡£

Win32 API ¤Ë¤Ï MultiByteToWideChar, WideCharToMultiByte ¤È¤¤¤¦ÊÑ´¹ API ¤¬¤¢¤ê¡¢¤³¤ì¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤Ç¥Þ¥ë¥Á¥Ð¥¤¥Èʸ»úÎó¤È¥ï¥¤¥Éʸ»úÎó¤Î´Ö¤òɬÍפ˱þ¤¸¤ÆÊÑ´¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤½¤·¤Æ¤³¤ÎÁàºî¤ò´Êñ¤Ë°·¤¦¤¿¤á¤Ë¡¢ATL ¤Ç¤¤¤¯¤Ä¤«¤Î¥¯¥é¥¹¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£(¢ªMSDN) Ãæ¿È¤Ë¶½Ì£¤Î¤¢¤ëÊý¤Ï¥¤¥ó¥¯¥ë¡¼¥É¥Ñ¥¹Æâ¤Î atlconv.h ¤ò¸«¤ë¤È¤è¤¤¤Ç¤·¤ç¤¦¡£

¡û ¤È¤â¤«¤¯¡¢¤³¤ì¤ò»È¤¨¤Ð´Êñ¤Ë LPTSTR ¤È UTF-8/16 ¤Î´Ö¤ÎÊÑ´¹¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

¤¿¤È¤¨¤Ð V8 ¤Ë¤è¤ë¼Â¹Ô·ë²Ì¤òʸ»úÎó¤È¤·¤Æ¼è¤ê½Ð¤¹¾ì¹ç¡¢²¼µ­¤Î¤è¤¦¤Ê¥³¡¼¥É¤ò½ñ¤¯¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

  v8::Handle<v8::Value> result = script->Run();
  v8::String::Value str(result);
  m_Result = CW2T((LPWSTR) *str);
  UpdateData(FALSE);

¡û UTF-8 ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤òÍѤ¤¤ë¾ì¹ç¤Ï¼ã´³ÌÌÅݤǡ¢°ìÅ٥磻¥Éʸ»úÎó¤ò·Ðͳ¤·¤Æ¤«¤é UTF-8 ¥³¡¼¥É¥Ú¡¼¥¸¤òÍѤ¤¤Æ UTF-8 ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤µ¤ì¤¿¥Þ¥ë¥Á¥Ð¥¤¥Èʸ»úÎó¤ËÌ᤹ɬÍפ¬¤¢¤ë¤è¤¦¤Ç¤¹¡£*2

CW2A, CA2W ¤Î¥³¥ó¥¹¥È¥é¥¯¥¿¤ËÌÀ¼¨Åª¤Ë¥³¡¼¥É¥Ú¡¼¥¸¤ò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¤Î¤Ç¡¢¤½¤ì¤ò»È¤¨¤Ð¡¢¾å¤Î¥³¡¼¥É¤ÈƱÍͤΤ³¤È¤Ï¼¡¤Î¥³¡¼¥É¤Ë¤è¤ê¼Â¸½¤Ç¤­¤Þ¤¹¡£

  v8::Handle<v8::Value> result = script->Run();
  v8::String::Utf8Value str(result);
  m_Result = CW2T(CA2W(*str, CP_UTF8));
  UpdateData(FALSE);

*1 ¤³¤³¤Ç¤Ï UTF-8 ʸ»úÎó¤Î¥µ¥Ö¥»¥Ã¥È¤¬ ASCII ¤Ç¤¢¤ë¤È¤¤¤¦¤³¤È¤Ëα°Õ¤¹¤ì¤ÐÅöÁ³¤Îµ¢·ë¤Ç¤¢¤í¤¦¤È»×¤¤¤Þ¤¹¡£

*2 ¥³¥ó¥Ñ¥¤¥ë¥ª¥×¥·¥ç¥ó»ØÄ꤬¥Þ¥ë¥Á¥Ð¥¤¥Èʸ»úÎó¤Î¾ì¹ç¡¢¥³¡¼¥É¥Ú¡¼¥¸ÊÑ´¹¤¬É¬Íפˤʤê¤Þ¤¹¡£CA2T ¤Ï CA2A ¤Ë #define ¤µ¤ì¤Þ¤¹¤¬¡¢¤³¤ÎÃæ¿È¤ò¸«¤ì¤Ð²¿¤â¤·¤Æ¤¤¤Ê¤¤¤³¤È¤¬¤ï¤«¤ë¤«¤È»×¤¤¤Þ¤¹¡£¤Ê¤Î¤Ç¡¢¤º¤ì¤¿¥³¡¼¥É¥Ú¡¼¥¸¤ò½¤Àµ¤¹¤ë¤¿¤á¤Ë¼ã´³²ó¤ê¤¯¤É¤¤¤Ç¤¹¤¬¤³¤¦¤¹¤ëɬÍפ¬¤¢¤ë¤è¤¦¤Ç¤¹¡£

ËÜÆü¤Î¥Ä¥Ã¥³¥ß(Á´2·ï) [¥Ä¥Ã¥³¥ß¤òÆþ¤ì¤ë]

¡û ¤æ¤­ [ÆÍÁ³¤Ç¤¹¤¬¤Á¤ç¤Ã¤È¼ÁÌ䤷¤¿¤¤¤Î¤Ç¤¹¤¬¡¢¤¹¤´¡¼¤¯Á°¤ËÆüµ­¤Ë º¸ÌܤÎÇòÌܤΤȤ³¤í¤Ë¤Á¤ç¤Ã¤È¡¢·ìƦ¤Î¤è¤¦¤Ê´¶¤¸¤ÇÀÖ¤¯¤Ê¤Ã..]

¡û Tossy-2 [To: ¤æ¤­¤µ¤ó ¤¹¤°¤«¤É¤¦¤«¤Ï³Ð¤¨¤Æ¤¤¤Þ¤»¤ó¤¬¡¢¤¤¤Ä¤Î´Ö¤Ë¤«¾Ã¤¨¤Æ¤¤¤¿¤è¤¦¤Ç¤¹¡£ Ìܤΰì»þŪ¤Ê½¼·ì¤ÈƱ¤¸¤Ç¡¢ÆÃ..]

ËÜÆü¤Î¥ê¥ó¥¯¸µ | 32 | 30 | 20 | 16 | 14 | 9 | 6 | 6 | 6 | 6 | TrackBack(0)

2008/11/10 (Mon)

¡û [Æüµ­][¥µ¡¼¥Ð´ÉÍý] ¥«¥Æ¥´¥ê¥¢¡¼¥«¥¤¥Ö¤È¥í¥Ü¥Ã¥È

ºÇ¶á¥¢¥¯¥»¥¹¥í¥°¤¬·ã¤·¤¤¤Ê¤¢¤È¤ª¤â¤Ã¤¿¤é¡¢Baiduspider ¤¬·ã¤·¤¯Ì¤Íè¤È¤«²áµî¤Î¥«¥Æ¥´¥ê¥¢¡¼¥«¥¤¥Ö¤ò¼è¤ê¤Ë¤­¤Æ¤Æ¡¢¥ë¡¼¥×¤Ë¤Ï¤Þ¤Ã¤Æ¤¤¤ë¤é¤·¤¤¡£

tdiary ¦¤Ç nofollow, noindex ¤È¤«¤¬»ØÄê¤Ç¤­¤ì¤Ð¤¤¤¤¤ó¤À¤±¤É¡¢¤½¤¦¤¤¤¦ÀßÄ꤬(¤Ñ¤Ã¤È¸«)¤Ê¤µ¤½¤¦¤Ë¸«¤¨¤ë¤Î¤Çº¤¤Ã¤Æ¤¤¤ë¤È¤³¤í¡£

¡û ¤½¤¦¤¤¤¨¤ÐÁ´Á³´Ø·¸¤Ï¤Ê¤¤¤±¤ì¤É¡¢É´ÅÙ³ô¼°²ñ¼Ò¤Ã¤ÆË¿¥Ó¥ë¤Î 20F ¤ËÆþ¤Ã¤Æ¤ë¤ó¤Ç¤¹¤Í¡£

ËÜÆü¤Î¥ê¥ó¥¯¸µ | 4 | 2 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | TrackBack(0)

2008/11/07 (Fri)

¡û [µ»½Ñ][C++] V8 ¤¢¤½¤Ó (¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ËÁȤ߹þ¤ó¤Ç¤ß¤ë)

´Êñ¤Ê V8 ¥¤¥ó¥¿¥×¥ê¥¿¤Î¿Þ

Á°²ó¥é¥¤¥Ö¥é¥ê¤¬¥Ó¥ë¥É¤Ç¤­¤¿¤Î¤Ç¡¢º£²ó¤Ï Win32 ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ë V8 ¥¨¥ó¥¸¥ó¤òÁȤ߹þ¤ó¤Ç¤ß¤Þ¤¹¡£ºÇ½é¤Ê¤Î¤Ç¡¢¤Þ¤º¤Ï´Êñ¤Ê GUI ¥¤¥ó¥¿¥×¥ê¥¿¤«¤é¡£

¤Þ¤º MFC ¥À¥¤¥¢¥í¥°¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¥×¥í¥¸¥§¥¯¥È(¤³¤³¤Ç¤Ï Hoge ¤È¤¤¤¦Ì¾Á°¤Ë¤·¤¿¤È¤·¤Þ¤¹)¤ò¤Ò¤È¤Ä¤Ä¤¯¤Ã¤Æ¤ª¤­¤Þ¤¹¡£¥×¥í¥¸¥§¥¯¥È¤ÎÀßÄê¤Ç¡¢¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤Î¥¤¥ó¥¯¥ë¡¼¥É¥Ñ¥¹¡¢¥é¥¤¥Ö¥é¥ê¤Î¥µ¡¼¥Á¥Ñ¥¹¤Ë V8 ¤Î¥é¥¤¥Ö¥é¥ê¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ò»ØÄꤷ¤Æ¤ª¤­¤Þ¤¹¡£¥¤¥ó¥¯¥ë¡¼¥É¥Ñ¥¹¤Ë¤Ï (V8 ¤Î¥ê¥Ý¥¸¥È¥ê)/include¡¢¥é¥¤¥Ö¥é¥ê¥Ñ¥¹¤Ë¤Ï (V8 ¤Î¥ê¥Ý¥¸¥È¥ê)/tools/visual_studio/{Debug,Release}/lib ¤ò»ØÄꤹ¤ì¤Ð OK ¤Ç¤¹¡£¤Þ¤¿¡¢Äɲå饤¥Ö¥é¥ê¤È¤·¤Æ v8_snapshot.lib ¤òÄɲ䷤Ƥª¤­¤Þ¤¹¡£

¡û ¼¡¤Ë½àÈ÷¤È¤·¤Æ¡¢¥À¥¤¥¢¥í¥°²èÌ̤òÊÔ½¸¤·¤Æ¤ª¤­¤Þ¤¹¡£

¤Þ¤º¥¹¥¯¥ê¥×¥È¤ò¥æ¡¼¥¶¤¬ÆþÎϤ¹¤ë¤¿¤á¤Î¥Æ¥­¥¹¥È¥Ü¥Ã¥¯¥¹¡¢¼Â¹Ô¤ò»ØÄꤹ¤ë¤¿¤á¤Î¥Ü¥¿¥ó¤È¡¢¤µ¤é¤Ë·ë²Ì¤òɽ¼¨¤¹¤ë¤¿¤á¤Î Static ¥³¥ó¥È¥í¡¼¥ë¤¯¤é¤¤¤¬É¬Íפˤʤë¤Ç¤·¤ç¤¦¡£

¤³¤ì¤é¤Î¥³¥ó¥Ý¡¼¥Í¥ó¥È¤òÇÛÃÖ¤·¤¿¸å¡¢Å¬µ¹ DDX ÊÑ¿ô¤Ë³ä¤êÅö¤Æ¤Æ¤ª¤­¤Þ¤¹¡£¤³¤³¤Ç¤Ï¥Æ¥­¥¹¥È¥Ü¥Ã¥¯¥¹¤Ï m_Script¡¢·ë²Ì¤Ï m_Result (¤¤¤º¤ì¤âÃÍÊÑ¿ô¤Ç¡¢CString ·¿¤ò»ý¤Ä)¤È¤¤¤¦Ì¾Á°¤ò¤Ä¤±¤¿¤È¤·¤Þ¤¹¡£

¡û ¤³¤³¤Þ¤Ç½àÈ÷¤¬¤Ç¤­¤¿¤é¡¢¤¤¤è¤¤¤è¥³¡¼¥É¤òµ­½Ò¤¹¤ëºî¶È¤Ë¤Ï¤¤¤ê¤Þ¤¹¡£stdafx.h ¤Ç v8.h ¤ò¥¤¥ó¥¯¥ë¡¼¥É¤·¡¢cpp ¤Î¥½¡¼¥¹¥³¡¼¥É¦¤Ç using namespace v8; ¤ò¤·¤Æ¤¤¤ë¤³¤È¤òÁ°Äó¤Ë¤·¤Þ¤¹*1¡£

V8 ¤Î Embedder's Guide ¤ä CodeProject ¤Î V8 µ­»ö¤Ë¤¢¤ë¤È¤ª¤ê¡¢V8 ¤òÍøÍѤ¹¤ë¤¿¤á¤Ë¤Ï¤Þ¤º¥³¥ó¥Æ¥¯¥¹¥È(Context ¤Î¥¤¥ó¥¹¥¿¥ó¥¹)¤òºîÀ®¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£

¥³¥ó¥Æ¥¯¥¹¥È¤Ï Context::New() ¥á¥½¥Ã¥É¤ÇºîÀ®¤Ç¤­¤Þ¤¹¤¬¡¢¤³¤ì¤ÎÊÖ¤êÃÍ¤Ï Persistent<Context> ¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£Persistent ¤È¤¤¤¦¥Æ¥ó¥×¥ì¡¼¥È¥¯¥é¥¹¤Ï Handle ¥¯¥é¥¹¤Î¥µ¥Ö¥¯¥é¥¹¤Ë¤Ê¤Ã¤Æ¤ª¤ê¡¢¤³¤ì¤é¤Ï¥¹¥Þ¡¼¥È¥Ý¥¤¥ó¥¿¤È²ò¼á¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

¤Þ¤¿¡¢¥¹¥¯¥ê¥×¥È¤Î¼Â¹Ô¤Ë¤Ï Context::Scope ¤òºîÀ®¤·¤Æ¡¢Àè¤Û¤ÉºîÀ®¤µ¤ì¤¿¥³¥ó¥Æ¥¯¥¹¥È¤Ë¡ÖÆþ¤Ã¤Æ¤ª¤¯¡×(Context::Enter ¤ò¸Æ¤ó¤Ç¤ª¤¯)ɬÍפ¬¤¢¤ê¤Þ¤¹¡£Context::Scope ¥¯¥é¥¹¤Ï¡¢¥¤¥ó¥¹¥¿¥ó¥¹¤¬¥ì¥­¥·¥«¥ë¥¹¥³¡¼¥×¤Ë¤¢¤ë´Ö¡¢¥³¥ó¥¹¥È¥é¥¯¥¿¤ËÅϤµ¤ì¤¿¥³¥ó¥Æ¥¯¥¹¥È¤ËÆþ¤Ã¤Æ¤¯¤ì¤Þ¤¹¡£

¤³¤ì¤é¤Î½é´ü²½¤Ï¡¢¥À¥¤¥¢¥í¥°¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¾ì¹ç CHogeApp::InitInstance() ¤Ç¤ä¤ì¤Ð¤è¤¤¤Ç¤·¤ç¤¦*2¡£½é´ü²½¥³¡¼¥É¤Î¥³¥á¥ó¥È¤¬¤Ä¤¤¤Æ¤¤¤ë¤¢¤¿¤ê¤ò½ñ¤­´¹¤¨¤Þ¤¹¡£

BOOL CHogeApp::InitInstance()
{
    ...(¾Êά)
    
    // ½é´ü²½
    CHogeDlg dlg;
    m_pMainWnd = &dlg;
    
    Persistent<Context> context = Context::New();
    Context::Scope context_scope(context);
    
    dlg.DoModal();
    
    // ¥À¥¤¥¢¥í¥°¤ÏÊĤ¸¤é¤ì¤Þ¤·¤¿¡£¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¥á¥Ã¥»¡¼¥¸ ¥Ý¥ó¥×¤ò³«»Ï¤·¤Ê¤¤¤Ç
    //  ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò½ªÎ»¤¹¤ë¤¿¤á¤Ë FALSE ¤òÊÖ¤·¤Æ¤¯¤À¤µ¤¤¡£
    return FALSE;
}

¡û ¤³¤ì¤Ç¥¹¥¯¥ê¥×¥È¤Î¼Â¹Ô´Ä¶­¤¬À°¤Ã¤¿¤Î¤Ç¡¢¤¢¤È¤Ï¥À¥¤¥¢¥í¥°Â¦¤Ç¥¹¥¯¥ê¥×¥È¤ò²ò¼á¡¦¼Â¹Ô¤¹¤ë¥³¡¼¥É¤ò½ñ¤­¤Þ¤¹¡£

¼Â¹Ô¥Ü¥¿¥ó¤Î¥Ï¥ó¥É¥é¤òºîÀ®¤·¡¢¼¡¤Î¤è¤¦¤Ê¥³¡¼¥É¤ò½ñ¤­¤Þ¤¹¡£

void CHogeDlg::OnBnClickedRun()
{
    HandleScope handle_scope;
    
    // ¥¹¥¯¥ê¥×¥È¤ò¥³¥ó¥Ñ¥¤¥ë
    UpdateData(TRUE);
    Local<Script> script =¡¡Script::Compile(String::New(CT2CA(m_Script)));
    if (script.IsEmpty()) {
        MessageBox(_T("Script compilation error"), _T("Error"), MB_ICONERROR | MB_OK);
    } else {
        // ¼Â¹Ô
        Local<Value> result = script->Run();
        if (result.IsEmpty()) {
            MessageBox(_T("Script execution error"), _T("Error"), MB_ICONERROR | MB_OK);
        } else {
            // ·ë²Ì¤òɽ¼¨
            String::Utf8Value str(result);
            m_Result = CA2CT(*str);
            UpdateData(FALSE);
        }
    }
}

¡û ¤³¤Î¥ë¡¼¥Á¥ó¤Ï Handle ¤ò°·¤¦¤Î¤Ç¡¢¤Þ¤º HandleScope ¤òºîÀ®¤·¤Æ¤ª¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡£»úÌ̤ǤϤ¢¤Þ¤ê¸«¤¨¤Þ¤»¤ó¤¬¡¢T::New ¤ÇÊ֤äƤ¯¤ë¤â¤Î¤Ï¤À¤¤¤¿¤¤ Local<T> ¤Ç¡¢¤³¤ì¤Ï¥Ï¥ó¥É¥ë¥¹¥¿¥Ã¥¯¤È¸Æ¤Ð¤ì¤ë¹½Â¤¤Ë³ä¤êÅö¤Æ¤é¤ì¤Þ¤¹¡£¤³¤Î¥¹¥³¡¼¥×¤ò´ÉÍý¤¹¤ë¤¿¤á¤Ë¤¢¤ë¤Î¤¬ HandleScope ¤Ç¡¢¤³¤Î¥¯¥é¥¹¤â¥ì¥­¥·¥«¥ë¥¹¥³¡¼¥×¤ò¥Ï¥ó¥É¥ë¥¹¥¿¥Ã¥¯¾å¤Î¥¹¥³¡¼¥×¤È¤·¤Æ°·¤¦¤¿¤á¤ÎÊä½õ¤ò¤·¤Æ¤¯¤ì¤Þ¤¹¡£

¤Þ¤º¥¹¥¯¥ê¥×¥È¤Î¥³¥ó¥Ñ¥¤¥ë¤Ç¤¹¤¬¡¢Script::Compile ¤ò»È¤¤¤Þ¤¹¡£String ¤òÅϤ¹É¬Íפ¬¤¢¤ê¡¢´ðËÜŪ¤Ë¤Ï UTF-8 ¤Ç²ò¼á¤µ¤ì¤ë¤è¤¦¤Ê¤Î¤ÇËÜÍè¤Ï¤³¤³¤Î¶­³¦¤Çʸ»ú¥³¡¼¥ÉÊÑ´¹¤¬É¬Íפˤʤê¤Þ¤¹¤¬´Êñ¤Î¤¿¤á¤Ë¾Êά¤·¤Æ¤¤¤Þ¤¹¡£(ASCII ¤ÏÌäÂê¤Ê¤¯°·¤¨¤Þ¤¹¤Î¤Ç¡¢ÊÑ´¹¥ë¡¼¥Á¥ó¤Ê¤É¤Ï¸å¤Û¤ÉÄɲ䷤Ƥ¤¤±¤Ð¤è¤¤¤Ç¤¹¡£)

¥³¥ó¥Ñ¥¤¥ë·ë²Ì¤Ï Local<Script> ¤È¤·¤ÆÊ֤äƤ¯¤ë¤Î¤Ç¡¢¥³¥ó¥Ñ¥¤¥ë¤¬À®¸ù¤·¤¿¤é Script::Run() ¤ò»È¤Ã¤Æ¼Â¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

¥³¥ó¥Ñ¥¤¥ë»þ¡¢¤Þ¤¿¤Ï¼Â¹Ô»þ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤¿¾ì¹ç¤Ï¤¤¤º¤ì¤«¤Î¥ë¡¼¥Á¥ó¤¬ empty ¤Ê¥Ï¥ó¥É¥ë¤òÊÖ¤·¤Þ¤¹¡£¥¨¥é¡¼½èÍý¤â¤Ç¤­¤Þ¤¹¤¬¤³¤ì¤Ï¤Þ¤¿Ê̤ε¡²ñ¤Ë¸å½Ò¤·¤Þ¤¹¡£

¼Â¹Ô¤¬À®¸ù¤·¤¿¤é¡¢Run ¤ÎÊÖ¤êÃͤòʸ»úÎó¤ËÊÑ´¹¤·¤Æ·ë²Ì¤Î¥¦¥£¥ó¥É¥¦¤Ëɽ¼¨¤¹¤ë¤è¤¦¤Ë¤·¤Æ¤ä¤ê¤Þ¤¹¡£¤³¤³¤Ç¤âʸ»ú¥³¡¼¥ÉÊÑ´¹¤¬¤ª¤¤¤ª¤¤É¬Íפˤʤê¤Þ¤¹¡£

¡û ¤³¤³¤Þ¤Ç¤Ç¡¢¤Þ¤º¤Ï´Êñ¤Ê¥¤¥ó¥¿¥×¥ê¥¿¤¬¤Ç¤­¤Þ¤·¤¿¡£non-ASCII ¤Êʸ»úÎó¤Ï¤Þ¤À¤¦¤Þ¤¯°·¤¨¤Þ¤»¤ó¤¬¡¢¤È¤ê¤¢¤¨¤º´Êñ¤Ê¥¹¥¯¥ê¥×¥È¤Ïư¤¯¤«¤È»×¤¤¤Þ¤¹¡£

¡û [µ»½Ñ][C++] V8 Í·¤Ó (Îã³°¥Ï¥ó¥É¥ê¥ó¥°ÊÔ)

¥¹¥¯¥ê¥×¥È¥³¥ó¥Ñ¥¤¥ë¡¦¼Â¹Ô¤ËºÝ¤·¤Æ¥¨¥é¡¼¤¬¤¢¤Ã¤¿¾ì¹ç(¤¿¤È¤¨¤Ð syntax error ¤¬¤¢¤Ã¤¿¾ì¹ç¤Ê¤É)¤Ë¤Ï¡¢¶õ¤Î¥Ï¥ó¥É¥ë¤¬ÊÖ¤ë¤È¤¤¤¦É÷¤Ë½ñ¤­¤Þ¤·¤¿¡£Àè¤Û¤É¤Î¥¨¥ó¥È¥ê¤Ç¤Ïñ½ã¤Ë¥á¥Ã¥»¡¼¥¸¥Ü¥Ã¥¯¥¹¤ò½Ð¤¹¤À¤±¤Ë¤·¤¿¤Î¤Ç¤¹¤¬¡¢¤³¤ì¤À¤±¤Ç¤Ï¤Ê¤¼¥¨¥é¡¼¤Ë¤Ê¤Ã¤¿¤Î¤«¤¬¤Þ¤Ã¤¿¤¯¤ï¤«¤ê¤Þ¤»¤ó¡£

¤½¤³¤Ç¡¢¥¨¥é¡¼(Îã³°)¤Î¥Ï¥ó¥É¥ê¥ó¥°¤ò¹Ô¤¦¤ï¤±¤Ç¤¹¤¬¡¢¤³¤Î¤¿¤á¤Ë¤Ï V8 ¤Î TryCatch ¥¯¥é¥¹¤ò»È¤¤¤Þ¤¹¡£¤³¤Î¥¯¥é¥¹¤Ï¥¤¥ó¥¹¥¿¥ó¥¹¤Î¥ì¥­¥·¥«¥ë¥¹¥³¡¼¥×¤ò try-catch ¥Ö¥í¥Ã¥¯¤È¤·¤Æµ¡Ç½¤µ¤»¤Þ¤¹¡£¤½¤ÎÃæ¤ÇÎã³°¤¬È¯À¸¤·¤¿¤È¤­¡¢Îã³°¤Ë´Ø¤¹¤ë¾ðÊó¤òÆâÉô¤ËÊÝ»ý¤¹¤ë¤È¤¤¤¦¤·¤«¤±¤Ç¤¹¡£

TryCatch ¤ò»È¤¦¤Ë¤Ï¡¢¤¿¤È¤¨¤Ð OnBnClickedRun() ¤ò¼¡¤Î¤è¤¦¤Ë½ñ¤­´¹¤¨¤Þ¤¹¡£

void CHogeDlg::OnBnClickedRun()
{
    HandleScope handle_scope;
    TryCatch try_catch;
    
    ...
    if (script.IsEmpty()) {
        String::Utf8Value str(try_catch.Exception());
        MessageBox(CA2CT(*str), _T("Error"), MB_ICONERROR | MB_OK);
    } else {
        ...
    }
}

¡û ¥¹¥¯¥ê¥×¥È¤Î¼Â¹Ô¥¨¥é¡¼¤¬È¯À¸¤·¤¿¾ì¹ç¤âƱÍÍ¤Ë try_catch.Exception() ¤òÍøÍѤ·¤Æ½ñ¤±¤Ð OK ¤Ç¤¹¡£

*1 ¤¤¤Á¤¤¤Á v8:: ¤È¤«½ñ¤¯¤Î¤¬¤¦¤ë¤µ¤¤¤Î¤Ç¡Ä¡£

*2 Ê£¿ô¤ÎÆÈΩ¤·¤¿¥³¥ó¥Æ¥¯¥¹¥È¤ò°·¤¦É¬Íפ¬¤¢¤ë¤È¤­¤Ê¤É¤Ï¤³¤Î¸Â¤ê¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¤¬¡¢GUI ¥¤¥ó¥¿¥×¥ê¥¿¤È¤¤¤¦À߷פ«¤é¤¹¤ë¤È¡¢¥³¥ó¥Æ¥¯¥¹¥È(¡á¼Â¹Ô´Ä¶­)¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤Ëɳ¤Å¤¯¤â¤Î¤Ç¤¢¤ë¤Î¤Ç¡¢¤³¤³¤ÇÌäÂê¤Ê¤¤¤ï¤±¤Ç¤¹¡£

ËÜÆü¤Î¥ê¥ó¥¯¸µ | 19 | 10 | 8 | 7 | 7 | 6 | 6 | 5 | 5 | 5 | TrackBack(0)

2008/11/05 (Wed)

¡û [Æüµ­] ¤ª¤Ò¤µ¤·¤Ö¤ê¤Ç¤¹

¤Ê¤ó¤«È¾Ç¯¤¢¤¤¤Æ¤·¤Þ¤¤¤Þ¤·¤¿(´À

ºÇ¶á¤É¤¦¤â̵°Ù¤Ë²á¤´¤¹¤³¤È¤¬Â¿¤¯¤Æ¥À¥á¤Ç¤¹¤Í¡Ä¡£

¡û [µ»½Ñ][C++] V8 ¤¢¤½¤Ó (¥Ó¥ë¥ÉÊÔ)

Á°¤«¤é JavaScript ¥¨¥ó¥¸¥ó¤ÎÁȤ߹þ¤ß¤Ë¶½Ì£¤ò»ý¤Ã¤Æ¤¤¤¿¤Î¤Ç¤¹¤¬¡¢Google Chrome ¤Î JavaScript ¥¨¥ó¥¸¥ó¡ÖV8¡×¤ÎÁȤ߹þ¤ßµ­»ö¤¬CodeProject ¤Ç½Ð¤Æ¤¤¤¿¤Î¤Ç¡¢»î¤·¤Æ¤ß¤ë¤³¤È¤Ë¤·¤Þ¤·¤¿¡£

°ÊÁ° SpiderMonkey ¤È¤«¤â»î¤·¤Æ¤ß¤¿¤³¤È¤¬¤¢¤ê¤Þ¤¹¤¬¡¢¤Ê¤ó¤È¤« Visual Studio ¤Ç¥Ó¥ë¥É¤·¤¿¤È»×¤Ã¤¿¤é Release ¥Ó¥ë¥É¤À¤È¤É¤¦¤âÊÑ¿ô¥¹¥³¡¼¥×¤Þ¤ï¤ê¤Îưºî¤¬ÊѤÀ¤Ã¤¿¤ê¡¢¥³¡¼¥É¤¬ C ¤È¤¤¤¦¤³¤È¤â¤¢¤Ã¤Æ C++ ¤«¤é¤­¤ì¤¤¤Ë¸Æ¤Ó½Ð¤¹¤Ë¤Ï¥é¥Ã¥Ñ¥¯¥é¥¹¤È¤«¤òÍѰդ¹¤ëɬÍפ¬¤¢¤ê¤½¤¦¤À¤Ã¤¿¤ê¤·¤Æ°à¤¨¤Æ¤·¤Þ¤·¤¿¡£V8 ¤Ï¤â¤È¤â¤È C++ ¤Ç¤Á¤ã¤ó¤È¥¯¥é¥¹¤ò»È¤Ã¤Æ½ñ¤«¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢C++ ¤Î GUI ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤«¤é¤Ï¸Æ¤Ó¤ä¤¹¤¤¤«¤Ê¤È»×¤Ã¤¿¼¡Âè¡£

¡û ²¿¤Ï¤Ê¤¯¤È¤â¡¢¤Þ¤º¤Ï¥Ó¥ë¥É¤¹¤ëɬÍפ¬¤¢¤ë¤Î¤Ç¤¹¤¬¡¢º£²ó¤Ï MFC ¤È¤«¤ò»È¤Ã¤¿ GUI ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤òÁȤ߹þ¤ß¥¿¡¼¥²¥Ã¥È¤È¤·¤Æ¹Í¤¨¤ë¤Î¤Ç¡¢½èÍý·Ï¤Ï Visual Studio (¤Á¤Ê¤ß¤Ë¥Ð¡¼¥¸¥ç¥ó¤Ï 2005)¤ò»È¤¤¤Þ¤¹¡£¤È¤¤¤Ã¤Æ¤â¡¢V8 ¤Ï¸ø¼°¤Ë VS2005, 2008 ¤Ç¤Î¥Ó¥ë¥É¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢¼ê½ç¤Ë±è¤Ã¤Æ¤ä¤ì¤ÐÆÃ¤Ë¤Ä¤Þ¤ë¤È¤³¤í¤Ï¤Ê¤¤¤«¤È»×¤¤¤Þ¤¹¡£

svn ¤«¤é¥³¡¼¥É¤òŬÅö¤Ê¤È¤³¤í¤Ë¥À¥¦¥ó¥í¡¼¥É¤·¥Ó¥ë¥É¤ò¹Ô¤¤¤Þ¤¹¤¬¡¢Visual Studio ¤Î¾ì¹ç´ðËÜŪ¤Ë¤Ï tools/visual_studio ¤Ë¤¢¤ë v8.sln ¤ò»È¤¨¤Ð OK ¤Ç¤¹¡£

¥Ó¥ë¥É¤Ë¤Ï¥³¥ó¥Ñ¥¤¥é¤Î¤Û¤«¤Ë Python ¤¬É¬ÍפÇ*1¡¢»ä¤Ï Win32 ¥Í¥¤¥Æ¥£¥Ö¤Ç¤Ï¤Ê¤¯ Cygwin ¤Î Python ¤ò»È¤¤¤Þ¤·¤¿¡£¤³¤Î¤¿¤á¡¢²¿²Õ½ê¤«¥¹¥¯¥ê¥×¥È¤Ê¤É¤Î½ñ¤­´¹¤¨¤¬É¬Íפˤʤê¤Þ¤¹¡£

  1. tools/visual_studio/js2c.cmd, tools/visual_studio/d8js2c.cmd
    • set PYTHON= ¤Î¹Ô¤Ë¤¢¤ë¥Ç¥Õ¥©¥ë¥È¤Î Python ¤Î¥Ñ¥¹¤ò Cygwin ¤Î bin/python.exe ¤Ë½ñ¤­´¹¤¨¡£
  2. tools/js2c.py
    • os.path.split ¤ò»È¤Ã¤Æ¤¤¤ë¤È¤³¤í¤Ç¡¢¥Ñ¥¹Ê¸»úÎó¤È¤·¤Æ str(s) ¤òÍ¿¤¨¤Æ¤¤¤ë¤Î¤ò string.replace(str(s), '\\', '/') ¤ËÊѹ¹¡£*2

¡û °Ê¾å¤ÎÊѹ¹¤ò¹Ô¤Ã¤Æ¡¢Ìµ»ö¤Ë¥é¥¤¥Ö¥é¥ê¤ä¥µ¥ó¥×¥ë·²¤¬¥Ó¥ë¥É¤Ç¤­¤Þ¤·¤¿¡£¥Ó¥ë¥É¤Î·ë²Ì¤Ï¡¢tools/visual_studio/{Debug, Release} ¤Ë½ÐÎϤµ¤ì¤Þ¤¹¡£

¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï V8 ¤Î snapshot ÈÇ*3 static library ¤¬¾åµ­¤Î¥Ç¥£¥ì¥¯¥È¥ê²¼¤Î lib ¥Ç¥£¥ì¥¯¥È¥êÆâ¤Ë¥Ó¥ë¥É¤µ¤ì¤Þ¤¹¡£DLL ¤Î¥Ó¥ë¥É¤Ë¤Ä¤¤¤Æ¤Ï¸½ºß¤Î¤È¤³¤í¤ä¤Ã¤Æ¤¤¤Þ¤»¤ó¤¬¡¢scons ¤ò»È¤¨¤Ð´Êñ¤ËÀÚ¤êÂØ¤¨¤Ç¤­¤ë¤è¤¦¤Ç¤¹¡£

¥·¥§¥ë¤Î¥µ¥ó¥×¥ë¤ò¥Ó¥ë¥É¤¹¤ë¤È¡¢¥³¥Þ¥ó¥É¥é¥¤¥ó¤«¤é V8 ¤Îưºî¤ò´Êñ¤Ë»î¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¥·¥§¥ë¤Ï .../{Debug,Release}/v8_shell_sample.exe ¤È¤Ê¤ê¤Þ¤¹¤Î¤Ç¡¢µ¯Æ°¤¹¤ë¤È¥×¥í¥ó¥×¥È¤¬½Ð¤ë¤Î¤Ç¡¢JavaScript ¥³¡¼¥É¤òÆþÎϤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

 V8 version 0.4.2.1
 > function fact(x) { if (x <= 1) return 1; else return x * fact(x - 1); }
 > fact(10)
 3628800
 >

¡û ¤Ê¤É¡£

*1 ¥Ç¥Õ¥©¥ë¥È¥¯¥é¥¹Îà¤ÎÄêµÁ¤ò¹Ô¤¦ JavaScript ¤ò C++ ¥½¡¼¥¹¤ËÁ°½èÍý¤¹¤ë¤¿¤á¤ËɬÍפʤ褦¤Ç¤¹¡£

*2 Cygwin ¤Î¾ì¹ç path separator ¤¬ '\' ¤Ç¤Ï¤Ê¤¯ '/' ¤Ê¤Î¤Ç¡¢¤½¤Î¤Þ¤Þ¤Ç¤Ïưºî¤·¤Þ¤»¤ó¡£¤½¤Î¤¿¤á¡¢ad hoc ¤Ç¤¢¤ë¤¬Ê¸»úÎóÃÖ´¹¤Ê¤É¤Ç¥Ñ¥¹¤òÊÑ´¹¤·¤Æ¤ä¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£

*3 ¥Ç¥Õ¥©¥ë¥È¥¯¥é¥¹·²¤òÆâÉô¥³¡¼¥É¤Ë¥³¥ó¥Ñ¥¤¥ë¤·¤Æµ¯Æ°¤ò¹â®²½¤¹¤ë¡¢¤È¤Î¤³¤È¡£Emacs ¤Î¥À¥ó¥×¤ÈƱ¤¸¤è¤¦¤Ê¤â¤Î¤«¤È»×¤ï¤ì¤Þ¤¹¡£

ËÜÆü¤Î¥ê¥ó¥¯¸µ | 4 | 4 | 3 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | TrackBack(0)

2008/05/29 (Thu)

¡û [Æüµ­][µ»½Ñ][¥µ¡¼¥Ð´ÉÍý] SSH ¸°¥Á¥§¥Ã¥¯

ÀèÆü½Ð¤¿ Debian ·Ï Linux ¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥·¥ç¥ó¤Î PRNG ¤ÎÌäÂê¤Ëµ¯°ø¤¹¤ëÀȼåÀ­¤Ë´Ø¤·¤Æ¡¢¼«Â𥵡¼¥Ð¤Ç¤â dowkd/dowkd.pl ¤Ë¤è¤ë¸ø³«¸°¤Î¥Æ¥¹¥È¤ò¹Ô¤¤¤Þ¤·¤¿¡£

¤È¤ê¤¢¤¨¤º³°Éô¤«¤é¤Î¥í¥°¥¤¥ó¥Ñ¥¹¤¬¤¢¤ë¤È¤³¤í¤ò¥Á¥§¥Ã¥¯¤·¤Þ¤·¤¿¤¬¡¢º£¤Î¤È¤³¤íÌäÂê¤Î¤¢¤ë¸°¤Ï¸«¤Ä¤«¤Ã¤Æ¤¤¤Þ¤»¤ó¡£

¤Þ¤¢¡¢»ä¤Î»È¤Ã¤Æ¤¤¤ë¡¦´ÉÍý¤·¤Æ¤¤¤ë¥Û¥¹¥È¤Ï¤Û¤È¤ó¤É FreeBSD ¤« Cygwin ¤¯¤é¤¤¤·¤«¤Ê¤¤¤Î¤Ç¿ʬ±Æ¶Á¤Ï¼õ¤±¤Æ¤¤¤Ê¤¤¤È»×¤¦¤Î¤Ç¤¹¤¬¡¢¸°¤È¤Ã¤«¤¨¤ä¤í¤¦¤È¤¹¤ë¤È·ë¹½¤á¤ó¤É¤¤¤ó¤À¤è¤Í¡£°ÊÁ°½ñ¤¤¤¿¸°¥æ¡¼¥Æ¥£¥ê¥Æ¥£»È¤¦¤È¿¾¯¤Ï³Ú¤À¤í¤¦¤«¡©

ËÜÆü¤Î¥ê¥ó¥¯¸µ | 392 | 333 | 289 | 143 | 124 | 55 | 48 | 44 | 40 | 31 | TrackBack(0)

2008/05/07 (Wed)

¡û [Æüµ­][³Ø¹»] Ï¢µÙ½ªÎ»

¤Ò¤µ¤·¤Ö¤ê¤Ë³Ø¹»¤ËÌá¤Ã¤Æ¤­¤Þ¤·¤¿¡£Ï¢µÙÃæÍ·¤Ó¤Þ¤¯¤Ã¤¿Èè¤ì¤¬È´¤±¤­¤Ã¤Æ¤¤¤Ê¤¤¤è¤¦¤Ç¡¢¼ã´³¥¹¥í¡¼¥Ú¡¼¥¹¤Ç¤¹¡£

ËÜÆü¤Î¥ê¥ó¥¯¸µ | 392 | 281 | 105 | 37 | 22 | 21 | 21 | 21 | 19 | 16 | TrackBack(0)

2008/05/01 (Thu)

¡û [¤½¤Î¾][¥á¥â][ι] ϢˮÀǤξ®ÀÚ¼êÅþÃå

¤³¤Á¤é¤â·×»»¤É¤ª¤ê¤ÇÊ֤äƤ­¤Þ¤·¤¿¡£»þ´Ö¤Î¤¢¤ë¤È¤­¤Ë¤È¤¤¤¦¤³¤È¤Ç¡¢º£Æü¤Þ¤È¤á¤ÆÃÓÂޤΥ·¥Æ¥£¥Ð¥ó¥¯¤Ë»ý¤Á¹þ¤ó¤Ç¤­¤¿¤È¤³¤í¡£

¡û [Æüµ­][³Ø¹»] 4 ·î¤â¤ª¤ï¤ê¤Þ¤·¤¿¤Í¤¨

ToDo: ·îÊó¤ò½Ð¤¹¡£

ËÜÆü¤Î¥ê¥ó¥¯¸µ | 79 | 17 | 15 | 15 | 10 | 8 | 6 | 6 | 5 | 4 | TrackBack(0)