文件ProgramExec.h
//---------------------------------------------------------------------------
#ifndef ProgramExecH
#define ProgramExecH
#include "MyUnicodeString.h"
//---------------------------------------------------------------------------
DWORD WINAPI ReadFromPipe(LPVOID args);
/* globals */
#define CHUNK 25
#define STATICBUFFERSIZE 1000
typedef struct {
HANDLE pipe;
char buffer[STATICBUFFERSIZE];
} pipeinfo;
pipeinfo Out = { INVALID_HANDLE_VALUE, '/0' };
pipeinfo Err = { INVALID_HANDLE_VALUE, '/0' };
MyUnicodeString* myUnicodeString;
void execProgram(UnicodeString& cmd,MyUnicodeString& _myUnicodeString,int& returnCode)
{
STARTUPINFOW si;
PROCESS_INFORMATION pi;
SECURITY_ATTRIBUTES sa;
DWORD threadID;
char msg[300];
BOOL ok;
HANDLE hProcess, h, pipeThreads[2];
char cmdline[100];
myUnicodeString = &_myUnicodeString;
hProcess = GetCurrentProcess();
ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
ZeroMemory(&si, sizeof(STARTUPINFOW));
si.cb = sizeof(STARTUPINFOW);
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdInput = INVALID_HANDLE_VALUE;
ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
/*
* Create a non-inheritible pipe.
*/
CreatePipe(&Out.pipe, &h, &sa, 0);
/*
* Dupe the write side, make it inheritible, and close the original.
*/
DuplicateHandle(hProcess, h, hProcess, &si.hStdOutput, 0, TRUE,
DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
/*
* Same as above, but for the error side.
*/
CreatePipe(&Err.pipe, &h, &sa, 0);
DuplicateHandle(hProcess, h, hProcess, &si.hStdError, 0, TRUE,
DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
ok = CreateProcessW(NULL, /* Module name. */
cmd.w_str(), /* Command line. */
NULL, /* Process handle not inheritable. */
NULL, /* Thread handle not inher 调用一个控制台程序并取得其输出(PIPE)
www.firnow.com 时间 : 2007-10-19 作者:佚名 编辑:本站 点击: [ 评论 ]
itable. */
TRUE, /* yes, inherit handles. */
DETACHED_PROCESS, /* No console for you. */
NULL, /* Use parent's environment block. */
NULL, /* Use parent's starting directory. */
&si, /* Pointer to STARTUPINFOW structure. */
&pi); /* Pointer to PROCESS_INFORMATION structure. */
if (!ok) {
DWORD err = GetLastError();
int chars = _snprintf(msg, sizeof(msg) - 1,
"Tried to launch: /"%s/", but got error [%u]: ", cmdline, err);
FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS
| FORMAT_MESSAGE_MAX_WIDTH_MASK, 0L, err, 0,
&msg[chars], (300 - chars), 0);
WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, lstrlen(msg), &err, NULL);
returnCode = 2;
return;
}
/*
* Close our references to the write handles that have now been inherited.
*/
CloseHandle(si.hStdOutput);
CloseHandle(si.hStdError);
WaitForInputIdle(pi.hProcess, 5000);
CloseHandle(pi.hThread);
/*
* Start the pipe reader threads.
*/
pipeThreads[0] = CreateThread(NULL, 0, ReadFromPipe, &Out, 0, &threadID);
pipeThreads[1] = CreateThread(NULL, 0, ReadFromPipe, &Err, 0, &threadID);
/*
* Block waiting for the process to end.
*/
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
/*
* Wait for our pipe to get done reading, should it be a little slow.
*/
WaitForMultipleObjects(2, pipeThreads, TRUE, INFINITE);
CloseHandle(pipeThreads[0]);
CloseHandle(pipeThreads[1]);
returnCode = 0;
return;
}
DWORD WINAPI ReadFromPipe(LPVOID args)
{
pipeinfo *pi = (pipeinfo *) args;
DWORD dwRead;
BOOL ok;
char buf[2000];
while(true)
{
ok = ReadFile(pi->pipe, buf, 2000, &dwRead, 0L);
if (!ok || dwRead == 0)
{
CloseHandle(pi->pipe);
return 0;
}
else
{
buf[dwRead] = 0;
// printf("%s", buf);
myUnicodeString->append(buf);
}
}
}
#endif
文件MyUnicodeString.h
//---------------------------------------------------------------------------
#ifndef MyUnicodeStringH
#define MyUnicodeStringH
//---------------------------------------------------------------------------
#include <vcl.h>
#include <windows.h>
#include <list>
using namespace std;
class MyUnicodeString
{
public:
MyUnicodeString();
~MyUnicodeString();
MyUnicodeString(wchar_t * wchar_ts);
MyUnicodeString(UnicodeString str);
MyUnicodeString(const wchar_t * wchar_ts);
MyUnicodeString(int number);
int indexOf(wchar_t ch);
int indexOf(wchar_t * wchar_ts);
int lastIndexOf(wchar_t ch);
int lastIndexOf(wchar_t * wchar_ts);
int getOccurCount(wchar_t* wchar_ts);
int getOccurCount(wchar_t ch);
int getLength();
int getLength(wchar_t * str);
int getLength(const wchar_t * str);
wchar_t* getReversed();
void reverse();
wchar_t* getReversed(wchar_t * str);
int copy(const wchar_t* src,wchar_t* dest);
int copy(wchar_t* src,wchar_t* dest);
void copy(wchar_t* src,wchar_t* dest,int count);
void copy(const wchar_t* src,wchar_t* dest,int count);
list<UnicodeString>* split(wchar_t* splitter);
list<UnicodeString>* split(UnicodeString splitter);
wchar_t * getSubString(int startIndex,int count);
wchar_t * getSubString(int startIndex);
void rtrim();
void ltrim();
void trim();
bool startsWith(wchar_t *wchar_ts);
bool endsWith(wchar_t *wchar_ts);
void replace(wchar_t* oldwchar_ts,wchar_t* newwchar_ts);
void replace(UnicodeString oldStr,UnicodeString newStr);
void toUpperCase();
void toLowerCase();
MyUnicodeString* operator + (wchar_t* wchar_ts);
wchar_t* towchar_ts();
UnicodeString getString();
wchar_t* getCopy();
bool isInt();//Contains only numbers
int toInt();
bool isLargerThan(wchar_t* wchar_ts);
bool equals(wchar_t* dest);
void append(const wchar_t * str);
void append(UnicodeString str);
void append(wchar_t * str);
void append(wchar_t ch);
void appendNum(int number);
void append(wchar_t appendwchar_t,int toLength);
void insertBefore(wchar_t insertwchar_t,int toLength);
void release();
wchar_t* getSpace(int count);
private:
int indexOf(wchar_t ch,bool isReverse);
int indexOf(wchar_t * wchar_ts,bool isReverse);
int indexOf(wchar_t* src,wchar_t ch,bool isReverse);
int indexOf(wchar_t* src,wchar_t * wchar_ts,bool isReverse);
wchar_t * getLtrim(wchar_t* wchar_ts);
wchar_t * getSubString(wchar_t* src,int startIndex,int count);
wchar_t * getSubString(wchar_t* src,int startIndex);
bool startsWith(wchar_t* src,wchar_t *wchar_ts);
void copy(wchar_t* src);
void copy(const wchar_t* src);
bool isBufferNull;
wchar_t * intTowchar_ts(int number);
void setEndChar(wchar_t* chars,int index);
protected:
void replaceBuffer(wchar_t* src);
wchar_t* charBuffer;
};
#endif
文件MyUnicodeString.cpp
//---------------------------------------------------------------------------
#pragma hdrstop
#include "MyUnicodeString.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
const wchar_t END_CHAR('/0');
MyUnicodeString::MyUnicodeString()
{
isBufferNull = true;
charBuffer = NULL;
}
MyUnicodeString::MyUnicodeString(UnicodeString str)
{
isBufferNull = true;
charBuffer = NULL;
if(str.Length()!=0)
{
copy(str.w_str());
}
}
MyUnicodeString::MyUnicodeString(wchar_t * wchar_ts)
{
isBufferNull = true;
charBuffer = NULL;
copy(wchar_ts);
}
MyUnicodeString::MyUnicodeString(const wchar_t * wchar_ts)
{
isBufferNull = true;
copy(wchar_ts);
}
MyUnicodeString::MyUnicodeString(int number)
{
isBufferNull = true;
wchar_t* wchar_ts = intTowchar_ts(number);
copy(wchar_ts);
free(wchar_ts);
}
wchar_t * MyUnicodeString::intTowchar_ts(int number)
{
const int maxLenForNumber = 10;
wchar_t * str = getSpace(maxLenForNumber);
wchar_t temp;
int i = 0;
if(number==0)
{
str[i]='0';
i++;
}
else
{
while(number!=0)
{
int remains = number%10;
number /= 10;
str[i] = remains+'0';
i++;
}
}
setEndChar(str,i);
i--;
for(int j=0;j<(i+1)/2;j++)
{
temp = str[j];
str[j] = str[i-j];
str[i-j] = temp;
}
return str;
}
wchar_t* MyUnicodeString::getSpace(int count)
{
return (wchar_t*)malloc(sizeof(wchar_t)*(count+1));
}
int MyUnicodeString::indexOf(wchar_t ch)
{
return indexOf(ch,true);
}
int MyUnicodeString::indexOf(wchar_t * wchar_ts)
{
return indexOf(wchar_ts,false);
}
int MyUnicodeString::lastIndexOf(wchar_t ch)
{
return indexOf(ch,true);
}
int MyUnicodeString::lastIndexOf(wchar_t * wchar_ts)
{
return indexOf(wchar_ts,true);
}
int MyUnicodeString::indexOf(wchar_t ch,bool isReverse)
{
return indexOf(charBuffer,ch,isReverse);
}
int MyUnicodeString::indexOf(wchar_t * wchar_ts,bool isReverse)
{
return indexOf(charBuffer,wchar_ts,isReverse);
}
int MyUnicodeString::indexOf(wchar_t* src,wchar_t ch,bool isReverse)
{
wchar_t * wchar_ts = getSpace(1);
wchar_ts[0] = ch;
setEndChar(wchar_ts,1);
int index = indexOf(src,wchar_ts,isReverse);
free(wchar_ts);
return index;
}
int MyUnicodeString::indexOf(wchar_t* src,wchar_t * toSearchwchar_ts,bool isReverse)
{
const int NOT_FOUND = -1;
if(src==NULL)
{
return NOT_FOUND;
}
if(toSearchwchar_ts[0]==END_CHAR)
return NOT_FOUND;
int i = 0;
int j = 0;
wchar_t * str,*searchStr;
int strLen,searchStrLen;
if(!isReverse)
{
str = src;
searchStr = toSearchwchar_ts;
}
else
{
str = getReversed();
searchStr = getReversed(toSearchwchar_ts);
}
strLen = getLength(str);
searchStrLen = getLength(searchStr);
while(str[i]!=END_CHAR)
{
j = 0;
while(searchStr[j]!=END_CHAR)
{
if(str[i+j]==END_CHAR)
return NOT_FOUND;
if(str[i+j]!=searchStr[j])
break;
j++;
}
if(searchStr[j]==END_CHAR)//reach the end
{
if(!isReverse)
return i;
else
return strLen-i-searchStrLen;
}
i++;
}
return NOT_FOUND;
}
int MyUnicodeString::getOccurCount(wchar_t* wchar_ts)
{
int occurCount = 0;
int index;
wchar_t * src = charBuffer;
while((index=indexOf(src,wchar_ts,false))!=-1)
{
src += index+getLength(wchar_ts);
occurCount++;
}
return occurCount;
}
int MyUnicodeString::getOccurCount(wchar_t ch)
{
wchar_t * wchar_ts = getSpace(1);
wchar_ts[0] = ch;
wchar_ts[1] = END_CHAR;
int occurCount = getOccurCount(wchar_ts);
free(wchar_ts);
return occurCount;
}
int MyUnicodeString::getLength()
{
return getLength(charBuffer);
}
int MyUnicodeString::getLength(wchar_t * str)
{
const wchar_t* str1 = str;
return getLength(str1);
}
int MyUnicodeString::getLength(const wchar_t * str)
{
int i = 0;
int length = 0;
if(str!=NULL)
{
while(str[i]!=END_CHAR)
{
i++;
length++;
}
}
return length;
}
wchar_t* MyUnicodeString::getReversed(wchar_t * str)
{
int len = getLength(str);
wchar_t * wchar_ts = getSpace(len);
for(int i=0;i<len;i++)
{
wchar_ts[len-i-1] = str[i];
}
wchar_ts[len] = END_CHAR;
return wchar_ts;
}
wchar_t* MyUnicodeString::getReversed()
{
return getReversed(charBuffer);
}
void MyUnicodeString::reverse()
{
wchar_t* reversed = getReversed();
replaceBuffer(reversed);
}
void MyUnicodeString::append(const wchar_t * str)
{
int bufferLen = getLength();
int strLen = getLength(str);
if(strLen!=0)
{
isBufferNull = false;
wchar_t * wchar_ts = getSpace(bufferLen+strLen);
copy(charBuffer,wchar_ts);
copy(str,wchar_ts+bufferLen);
replaceBuffer(wchar_ts);
}
}
void MyUnicodeString::append(wchar_t * str)
{
const wchar_t* str1 = str;
append(str1);
}
void MyUnicodeString::append(wchar_t ch)
{
wchar_t * wchar_ts = getSpace(1);
wchar_ts[0] = ch;
wchar_ts[1] = END_CHAR;
append(wchar_ts);
free(wchar_ts);
}
void MyUnicodeString::append(UnicodeString str)
{
append(str.w_str());
}
void MyUnicodeString::appendNum(int number)
{
wchar_t* wchar_ts = intTowchar_ts(number);
append(wchar_ts);
free(wchar_ts);
}
int MyUnicodeString::copy(wchar_t* src,wchar_t* dest)
{
int i = 0;
if(src==NULL||dest==NULL)
return 0;
while(src[i]!=END_CHAR)
{
dest[i] = src[i];
i++;
}
dest[i] = END_CHAR;
return i;
}
int MyUnicodeString::copy(const wchar_t* src,wchar_t* dest)
{
int i = 0;
while(src[i]!=END_CHAR)
{
dest[i] = src[i];
i++;
}
dest[i] = END_CHAR;
return i;
}
void MyUnicodeString::copy(wchar_t* src,wchar_t* dest,int count)
{
int i = 0;
if(src==NULL||dest==NULL)
{
return;
}
while(src[i]!=END_CHAR&&i<=count-1)
{
dest[i] = src[i];
i++;
}
dest[i] = END_CHAR;
}
void MyUnicodeString::copy(const wchar_t* src,wchar_t* dest,int count)
{
int i = 0;
while(src[i]!=END_CHAR&&i<=count-1)
{
dest[i] = src[i];
i++;
}
dest[i] = END_CHAR;
}
void MyUnicodeString::copy(wchar_t* src)
{
int strLen = getLength(src);
if(strLen!=0)
{
release();
charBuffer = getSpace(strLen);
isBufferNull = false;
copy(src,charBuffer);
}
}
void MyUnicodeString::copy(const wchar_t* src)
{
int i = 0;
int strLen = 0;
while(src[i]!=END_CHAR)
{
i++;
strLen++;
}
if(strLen!=0)
{
release();
charBuffer = getSpace(strLen);
isBufferNull = false;
copy(src,charBuffer);
}
}
list<UnicodeString>* MyUnicodeString::split(wchar_t* splitter)
{
if(charBuffer==NULL)
return NULL;
list<UnicodeString>* resultList = new list<UnicodeString>();
int occurCount = getOccurCount(splitter);
int splitterLen = getLength(splitter);
wchar_t** arr = (wchar_t**)malloc(sizeof(wchar_t*)*(occurCount+2));
wchar_t *src = charBuffer;
int index;
int start = 0;
int arrIndex = 0;
int length = 0;
while((index=indexOf(src,splitter,false))!=-1)
{
length = index;
arr[arrIndex] = getSubString(start,length);
start += length + splitterLen;
src += length + splitterLen;
arrIndex++;
}
arr[arrIndex] = getSubString(start);
for(int i=0;i<=arrIndex;i++)
{
resultList->push_back(UnicodeString(arr[i]));
free(arr[i]);
}
free(arr);
return resultList;
}
list<UnicodeString>* MyUnicodeString::split(UnicodeString splitter)
{
if(splitter!=NULL)
{
return split(splitter.w_str());
}
else
{
return NULL;
}
}
wchar_t * MyUnicodeString::getSubString(wchar_t* src,int startIndex,int count)
{
wchar_t* dest = getSpace(count);
copy(src+startIndex,dest,count);
return dest;
}
wchar_t * MyUnicodeString::getSubString(int startIndex,int count)
{
return getSubString(charBuffer,startIndex,count);
}
wchar_t * MyUnicodeString::getSubString(wchar_t* src,int startIndex)
{
int length = getLength(src+startIndex);
wchar_t* dest = getSpace(length);
copy(src+startIndex,dest,length);
return dest;
}
wchar_t * MyUnicodeString::getSubString(int startIndex)
{
return getSubString(charBuffer,startIndex);
}
void MyUnicodeString::rtrim()
{
if(getLength()!=0)
{
wchar_t* reversed = getReversed();
release();
wchar_t* ltrimed = getLtrim(reversed);
free(reversed);
if(getLength(ltrimed)!=0)
{
replaceBuffer(getReversed(ltrimed));
}
free(ltrimed);
}
}
wchar_t * MyUnicodeString::getLtrim(wchar_t* wchar_ts)
{
int i = 0;
while(wchar_ts[i]!=END_CHAR)
{
if(wchar_ts[i]!=' ')
break;
i++;
}
return getSubString(wchar_ts,i);
}
void MyUnicodeString::ltrim()
{
if(getLength()!=0)
{
wchar_t * ltrimed = getLtrim(charBuffer);
release();
copy(ltrimed);
free(ltrimed);
}
}
void MyUnicodeString::trim()
{
rtrim();
ltrim();
}
bool MyUnicodeString::startsWith(wchar_t* src,wchar_t *wchar_ts)
{
int i = 0;
bool result = true;
while(src[i]!=END_CHAR&&wchar_ts[i]!=END_CHAR)
{
if(src[i]!=wchar_ts[i])
{
result = false;
break;
}
i++;
}
if(src[i]==END_CHAR&&wchar_ts[i]!=END_CHAR)
result = false;
return result;
}
bool MyUnicodeString::startsWith(wchar_t *wchar_ts)
{
return startsWith(charBuffer,wchar_ts);
}
bool MyUnicodeString::endsWith(wchar_t *wchar_ts)
{
wchar_t* reversedSrc = getReversed();
wchar_t* reversedwchar_ts = getReversed(wchar_ts);
bool result = startsWith(reversedSrc,reversedwchar_ts);
free(reversedSrc);
free(reversedwchar_ts);
return result;
}
void MyUnicodeString::replace(wchar_t* oldwchar_ts,wchar_t* newwchar_ts)
{
int occurCount = getOccurCount(oldwchar_ts);
int oldwchar_tsLen = getLength(oldwchar_ts);
int newwchar_tsLen = getLength(newwchar_ts);
int newLength = getLength(charBuffer)+(newwchar_tsLen-oldwchar_tsLen)*occurCount;
wchar_t * wchar_ts = getSpace(newLength);
wchar_t *src = charBuffer;
int index;
int start = 0;
int i = 0;
int length = 0;
wchar_t * temp;
wchar_t * dest = wchar_ts;
while((index=indexOf(src,oldwchar_ts,false))!=-1)
{
length = index;
copy(src,dest,length);
dest += length;
start = length + oldwchar_tsLen;
src += start;
copy(newwchar_ts,dest,newwchar_tsLen);
dest += newwchar_tsLen;
i++;
}
copy(src,dest);
wchar_ts[newLength] = END_CHAR;
copy(wchar_ts);
free(wchar_ts);
}
void MyUnicodeString::replace(UnicodeString oldStr,UnicodeString newStr)
{
replace(oldStr.w_str(),newStr.w_str());
}
wchar_t* MyUnicodeString::getCopy()
{
int length = getLength();
wchar_t * wchar_ts = getSpace(length);
copy(charBuffer,wchar_ts);
return wchar_ts;
}
void MyUnicodeString::toUpperCase()
{
int i = 0;
wchar_t* dest = getCopy();
while(dest[i]!=END_CHAR)
{
if(dest[i]>='a'&&dest[i]<='z')
dest[i] -= 'a'-'A';
i++;
}
copy(dest);
free(dest);
}
void MyUnicodeString::toLowerCase()
{
int i = 0;
wchar_t* dest = getCopy();
while(dest[i]!=END_CHAR)
{
if(dest[i]>='A'&&dest[i]<='Z')
dest[i] += 'a'-'A';
i++;
}
copy(dest);
free(dest);
}
MyUnicodeString* MyUnicodeString::operator + (wchar_t* wchar_ts)
{
append(wchar_ts);
return this;
}
wchar_t* MyUnicodeString::towchar_ts()
{
return charBuffer;
}
UnicodeString MyUnicodeString::getString()
{
return UnicodeString(charBuffer);
}
bool MyUnicodeString::equals(wchar_t* dest)
{
if(getLength()==getLength(dest)&&startsWith(dest))
return true;
else
return false;
}
bool MyUnicodeString::isInt()
{
if(charBuffer==NULL)
return false;
int i = 0;
while(charBuffer[i]!=END_CHAR)
{
if(i==0)
{
if((charBuffer[i]<'0'||charBuffer[i]>'9')
&&charBuffer[i]!='-')
return false;
}
else
{
if(charBuffer[i]<'0'||charBuffer[i]>'9')
return false;
}
i++;
}
return true;
}
int MyUnicodeString::toInt()
{
int i = 0;
int result = 0;
int sub = 1; //To identify positive or negative number
if(isInt())
{
while(charBuffer[i]!=END_CHAR)
{
if(i==0&&charBuffer[i]=='-')
sub = -1;
else
result = result*10+charBuffer[i]-48;
i++;
}
result *= sub;
}
else
{
throw "Not Integer";
}
return result;
}
bool MyUnicodeString::isLargerThan(wchar_t* wchar_ts)
{
int i = 0;
while(charBuffer[i]!=END_CHAR&&wchar_ts[i]!=END_CHAR)
{
if(charBuffer[i]>wchar_ts[i])
return true;
else if (charBuffer[i]<wchar_ts[i])
return false;
i++;
}
if(charBuffer[i]==END_CHAR&&wchar_ts[i]!=END_CHAR)
return false;
if(charBuffer[i]!=END_CHAR&&wchar_ts[i]==END_CHAR)
return true;
return false;
}
void MyUnicodeString::replaceBuffer(wchar_t* src)
{
release();
isBufferNull = false;
charBuffer = src;
}
void MyUnicodeString::append(wchar_t appendwchar_t,int toLength)
{
int len = getLength();
wchar_t* wchar_ts = getSpace(toLength);
copy(charBuffer,wchar_ts);
for(int i=0;i<toLength-len;i++)
{
wchar_ts[len+i]=appendwchar_t;
}
wchar_ts[toLength] = END_CHAR;
replaceBuffer(wchar_ts);
}
void MyUnicodeString::insertBefore(wchar_t insertwchar_t,int toLength)
{
int len = getLength();
if(toLength>len)
{
wchar_t* wchar_ts = getSpace(toLength);
int i;
for(i=0;i<toLength-len;i++)
{
wchar_ts[i]=insertwchar_t;
}
copy(charBuffer,wchar_ts+i);
replaceBuffer(wchar_ts);
}
}
void MyUnicodeString::release()
{
if(!isBufferNull)
{
free(charBuffer);
charBuffer = NULL;
isBufferNull = true;
}
}
void MyUnicodeString::setEndChar(wchar_t* chars,int index)
{
wcscpy(chars+index,L"/0");
}
MyUnicodeString::~MyUnicodeString()
{
release();
}
测试代码:
UnicodeString cmd("help");
MyUnicodeString myUnicodeString;
int returnCode;
execProgram(cmd,myUnicodeString,returnCode);
控制台程序输入信息:myUnicodeString.getString();