|
发表于 2018-1-9 22:45:05
|
显示全部楼层
//UTF-8 转 Unicode
function A2W(szU8)
var wcsLen = MultiByteToWideChar(CP_UTF8,null,szU8,strlenA(szU8),null,0)
var wszString = new(wcsLen+1,"wchar")
memset(wszString,0,wcsLen+1)
MultiByteToWideChar(CP_UTF8, null, szU8, strlenA(szU8), wszString, wcsLen)
memset(wszString+wcsLen*2, 0, 1)
var str
str = getvoid(wszString,"wchar *")
delete(wszString)
return str
end
//Unicode 转 UTF-8
function W2A(unicode)
var len = WideCharToMultiByte(CP_UTF8,0,unicode,-1,null,0,null,null)
var szUtf8 = new(len+1,"char")
memset(szUtf8, 0, len + 1)
WideCharToMultiByte(CP_UTF8, 0, unicode, -1, szUtf8, len, null, null)
memset(szUtf8+len, 0, 1)
var str
str = getvoid(szUtf8,"char *")
delete(szUtf8)
return str
end
function strlenA(str)
return dllcall("Kernel32.dll","long","lstrlenA","char *",str)
end
function strlenW(str)
return dllcall("Kernel32.dll","long","lstrlenW","wchar *",str)
end
function MultiByteToWideChar(CodePage,dwFlags,lpMultiByteStr,cchMultiByte,lpWideCharStr,cchWideChar)
//int MultiByteToWideChar(
//UINT CodePage,
//DWORD dwFlags,
//LPCSTR lpMultiByteStr,
//int cchMultiByte,
//LPWSTR lpWideCharStr,
//int cchWideChar
//);
return dllcall("kernel32.dll", "long", "MultiByteToWideChar", "long", CodePage, "long", dwFlags,"char *", lpMultiByteStr,"long", cchMultiByte,"long", lpWideCharStr,"long", cchWideChar)
end
function WideCharToMultiByte(CodePage,dwFlags,lpWideCharStr,cchWideChar,lpMultiByteStr,cchMultiByte,lpDefaultChar,pfUsedDefaultChar)
//int WideCharToMultiByte(
//UINT CodePage, //指定执行转换的代码页
//DWORD dwFlags, //允许你进行额外的控制,它会影响使用了读音符号(比如重音)的字符
//LPCWSTR lpWideCharStr, //指定要转换为宽字节字符串的缓冲区
//int cchWideChar, //指定由参数lpWideCharStr指向的缓冲区的字符个数
//LPSTR lpMultiByteStr, //指向接收被转换字符串的缓冲区
//int cchMultiByte, //指定由参数lpMultiByteStr指向的缓冲区最大值
//LPCSTR lpDefaultChar, //遇到一个不能转换的宽字符,函数便会使用pDefaultChar参数指向的字符
//LPBOOL pfUsedDefaultChar //至少有一个字符不能转换为其多字节形式,函数就会把这个变量设为TRUE
//);
return dllcall("kernel32.dll", "long", "WideCharToMultiByte", "long", CodePage, "long", dwFlags,"wchar *", lpWideCharStr,"long", cchWideChar,"long", lpMultiByteStr,"long", cchMultiByte,"long",lpDefaultChar,"long",pfUsedDefaultChar)
end
var CP_UTF8=65001
//////////////////////////////////////////////////
//申请内存地址//一定要delete 否则内存泄漏
function new(nSize,type)
var void = array()
select(type)
case "char"
void["void"] = array("char" = nSize, "value" = "")
case "wchar"
void["void"] = array("wchar" = nSize, "value" = "")
case "long"
void["void"] = array("long" = nSize, "value" = "")
case "short"
void["void"] = array("short" = nSize, "value" = "")
default
traceprint("******************")
traceprint("**** new 空缺*****")
traceprint("******************")
end
return structmalloc(void)
end
//释放内存
function delete(address)
structfree(address)
end
//重置一段内存中值
function memset(address, value, nSize)
return dllcall("kernel32.dll", "long", "RtlFillMemory", "long", address, "long", nSize, "long", value)
end
功能 memcopy(Destination,Source,nSize)
var ret = dllcall("Kernel32.dll","long","RtlMoveMemory","long",Destination,"long",Source,"long",nSize)
traceprint(获取错误信息(1))
return ret
结束
功能 memcopy_byte(Destination,Source,nSize)
var ret = dllcall("Kernel32.dll","long","RtlMoveMemory","byte",Destination,"long",Source,"long",nSize)
traceprint(获取错误信息(1))
return ret
结束
//内存获取值
function getvoid(address,type)
return addressvalue(address, type)
end |
|