回复:【程序】基于Control脚本和TCP的天气预报系统

lizhigang

  • 帖子

    8
  • 精华

    1
  • 被关注

    3

论坛等级:游民

注册时间:2004-02-28

普通 普通 如何晋级?

发布于 2014-03-12 15:26:00

2楼

可能用到的C++函数为:
unsigned int _mbctombb( unsigned int c );
将双字节多字节字符转换为相应的单字节多字节字符。
需要#include

ANSI转为UNICODE的dll函数源代码:
#include
#define LOCNAME "chinese-simplified"
#define BUF_SIZE 256
#include
//------------------------------------------------------------------------------

static FunctionListRec fnList[] =
{
// TODO add for every new function an entry
/*{ INTEGER_VAR, "add", "(int a, int b, int &sum)", false },*/
{ INTEGER_VAR, "ANSI_Unicode", "(string ANSI_Src,blob &Unicode_Des)", true }
};

CTRL_EXTENSION(convertExternHdl, fnList)

//------------------------------------------------------------------------------

const Variable *convertExternHdl::execute(ExecuteParamRec ¶m)
{
enum
{
// TODO add here all your function numbers in the sequence used in the FunctionListRec array

F_cvt = 0
};

// TODO for the different return types you need corresponding static Variables
static IntegerVar integerVar;
static BlobVar blobVar;
switch ( param.funcNum )
{
// ---------------------------------------------------------------------
case F_cvt:
{
param.thread->clearLastError();
if ( !param.args (param.args->getNumberOfItems() != 2) )
{
ErrClass err(ErrClass::PRIO_WARNING,
ErrClass::ERR_CONTROL, ErrClass::ARG_MISSING,
param.thread->getLocation(), param.funcName);

ErrHdl::error(err);
param.thread->appendLastError(err);

integerVar.setValue(-1); return &integerVar;
}

TextVar textVar;
textVar = *(param.args->getFirst()->evaluate(param.thread));
Variable *des = param.args->getNext()->getTarget(param.thread);

if ( ! des )
{
ErrClass err(ErrClass::PRIO_WARNING,
ErrClass::ERR_CONTROL, ErrClass::NO_LVALUE,
param.thread->getLocation(), param.funcName);

ErrHdl::error(err);
param.thread->appendLastError(err);

integerVar.setValue(-1); return &integerVar;
}


if (setlocale(LC_ALL,LOCNAME) == NULL)
{
ErrClass err(ErrClass::PRIO_WARNING,
ErrClass::ERR_CONTROL, ErrClass::ERR_CONTROL,
param.thread->getLocation(), param.funcName);

ErrHdl::error(err);
param.thread->appendLastError(err);

integerVar.setValue(-1); return &integerVar;
}
size_t length=0;

mbstate_t *ptMbstate_t =0;

const char *strOriginal = textVar.getString();
length = mbsrtowcs(NULL,&strOriginal,0,ptMbstate_t);
wchar_t buffer[BUF_SIZE];
for(int i=0;i< BUF_SIZE; i++)
{
buffer[i]=(wchar_t)0x0000;
}
mbsrtowcs(buffer,&strOriginal,length,ptMbstate_t);
PVSSuchar *data;
data = (PVSSuchar*)buffer;
BlobVar blobVar(data,(PVSSulong)length*2,true);
// relase system resource
ptMbstate_t = NULL;
strOriginal = NULL;
data = NULL;

*des = blobVar;

integerVar.setValue(0);

return &integerVar;
}


// ---------------------------------------------------------------------

default:
{ integerVar.setValue(-1);}
//After switch ......
////////
return &integerVar;

}
}


参考:
http://msdn.microsoft.com/zh-cn/library/0heszx3w.aspx
http://msdn.microsoft.com/zh-cn/library/6e348b4x.aspx
喵了个咪的再汪打你
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC OA (原PVSS)

共有386条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。