【C++】AS3資料型態轉換
之前專案在做C++對接AS3的時候,
對雙方資料交換處理上有弄成一個類方便來使用
AneDataConvert.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
Theme: FlashNative | |
Compiler: Microsoft Visual Studio 2012 Express | |
Date: 2017/11/10 | |
Author: LeesonHsu | |
Email:leesonhsu@arplanet.com.tw | |
Blog: www.arplanet.com.tw | |
*/ | |
#include "ExtensionAneConfig.h" | |
#ifndef DATACONVERT_H | |
#define DATACONVERT_H | |
class AneDataConvert | |
{ | |
public: | |
// c++ to as3 | |
static FREObject AsBool(int32_t vaule); | |
static FREObject AsInt(int32_t vaule); | |
static FREObject AsUint(unsigned int i); | |
static FREObject AsDouble(double vaule); | |
static FREObject AsUTF8_WCHAR(const wchar_t* str); | |
static FREObject AsUTF8(const char* str); | |
static FREObject AsUTF8(wchar_t * str); | |
static FREObject AsPoint(double x,double y); | |
static FREObject AsVector3D(double x,double y,double z); | |
// as3 to c++ | |
static bool ToBool(FREObject freObject); | |
static int ToInt(FREObject freObject); | |
static unsigned int ToUint(FREObject freObject); | |
static double ToDouble(FREObject freObject); | |
static const char* ToUTF8(FREObject freObject); | |
static const wchar_t * ToUTF8_LCPW(FREObject freObject); | |
//c++ send event to as3 | |
static void dispatchEvent(FREContext ctx, const uint8_t* state, const uint8_t* evt); | |
}; | |
#endif |
AneDataConvert.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
Theme: FlashNative | |
Compiler: Microsoft Visual Studio 2012 Express | |
Date: 2017/11/10 | |
Author: LeesonHsu | |
Email:leesonhsu@arplanet.com.tw | |
Blog: www.arplanet.com.tw | |
*/ | |
#include "AneDataConvert.h" | |
//[c++ to as3] 型態轉換 bool | |
FREObject AneDataConvert::AsBool(int32_t vaule) | |
{ | |
FREObject obj; | |
FRENewObjectFromBool((vaule) ? 1 : 0, &obj); | |
return obj; | |
} | |
//[c++ to as3] 型態轉換 int | |
FREObject AneDataConvert::AsInt(int32_t vaule) | |
{ | |
FREObject obj; | |
FRENewObjectFromInt32(vaule, &obj); | |
return obj; | |
} | |
//[c++ to as3] 型態轉換 uint | |
FREObject AneDataConvert::AsUint(unsigned int vaule) | |
{ | |
FREObject obj; | |
FRENewObjectFromUint32(vaule, &obj); | |
return obj; | |
} | |
//[c++ to as3] 型態轉換 double | |
FREObject AneDataConvert::AsDouble(double vaule) | |
{ | |
FREObject obj; | |
FRENewObjectFromDouble(vaule, &obj); | |
return obj; | |
} | |
//[c++ to as3] char 型態轉換 string | |
FREObject AneDataConvert::AsUTF8(const char* str) | |
{ | |
FREObject obj; | |
FRENewObjectFromUTF8( strlen( str ) + 1, (const uint8_t*) str, &obj ); | |
return obj; | |
} | |
//[c++ to as3] wcahr 型態轉換 string | |
FREObject AneDataConvert::AsUTF8_WCHAR(const wchar_t* wstr) | |
{ | |
//將wchar轉char | |
_bstr_t cStr(wstr); | |
const char* str = cStr; | |
return AsUTF8(str); | |
} | |
//[c++ to as3] 型態轉換 point | |
FREObject AneDataConvert::AsPoint(double x,double y) | |
{ | |
FREObject point; | |
FREObject freX, freY; | |
FRENewObjectFromDouble(x, &freX); | |
FRENewObjectFromDouble(y, &freY); | |
FREObject pointParams[] = {freX, freY}; | |
FRENewObject( (const uint8_t*) "flash.geom.Point", 2, pointParams, &point, NULL); | |
return point; | |
} | |
//[as3 to c++] 型態轉換 bool | |
bool AneDataConvert::ToBool(FREObject freObject) | |
{ | |
unsigned int value; | |
FREGetObjectAsBool(freObject, &value); | |
return (value != 0); | |
} | |
//[as3 to c++] 型態轉換 int | |
int AneDataConvert::ToInt(FREObject freObject) | |
{ | |
int value; | |
FREGetObjectAsInt32(freObject,&value); | |
return value; | |
} | |
//[as3 to c++] 型態轉換 uint | |
unsigned int AneDataConvert::ToUint(FREObject freObject) | |
{ | |
unsigned int value; | |
FREGetObjectAsUint32(freObject, &value); | |
return value; | |
} | |
//[as3 to c++] 型態轉換 double | |
double AneDataConvert::ToDouble(FREObject freObject) | |
{ | |
double value; | |
FREGetObjectAsDouble(freObject, &value); | |
return value; | |
} | |
//[as3 to c++] 型態轉換 char* | |
const char* AneDataConvert::ToUTF8(FREObject freObject) | |
{ | |
uint32_t len; | |
const uint8_t* str; | |
FREGetObjectAsUTF8(freObject, &len, &str ); | |
return (const char*)str; | |
} | |
//[as3 to c++] 型態轉換 wchar_t* | |
const wchar_t* AneDataConvert::ToUTF8_LCPW(FREObject freObject) | |
{ | |
uint32_t len; | |
const uint8_t* str; | |
wchar_t wBuffer[1024]; | |
FREGetObjectAsUTF8(freObject, &len, &str ); | |
MultiByteToWideChar( CP_UTF8, 0, (const char*)str, -1, wBuffer, 1024); | |
return wBuffer; | |
} | |
//[c++ to as3] event | |
void AneDataConvert::dispatchEvent(FREContext ctx,const uint8_t* state,const uint8_t* evt) | |
{ | |
FREDispatchStatusEventAsync(ctx, state, evt); | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//查找窗口名稱,強制關閉窗口 | |
FREObject NativeAneManager::closeWindow(FREObject windowname) | |
{ | |
bool isHasHwd = false; | |
//取得窗口 | |
HWND hwd = FindWindow( NULL, AneDataConvert::ToUTF8_LCPW(windowname)); //window Name | |
if(hwd) | |
{ | |
SendMessage(hwd, WM_SYSCOMMAND, SC_CLOSE, 0); | |
isHasHwd=true; | |
} | |
return AneDataConvert::AsBool(isHasHwd); | |
} |
張貼留言