WSUnicodeContainer (C 函数)

是一个为储存 UCS-2、UTF-8、UTF-16 或 UTF-32 编码的字符串和它们的长度的 WSTP 类型,可方便在 WSTP 模板程序中的函数间传递 Unicode 字符串.

更多信息

  • 使用可提供便捷的宏 WSUnicodeStringLength(container) 来访问用于储存 Unicode 字符串的代码单元的数量. 代码单元的类型根据包括在容器内的 Unicode 字符串的类型不同而改变.
  • 使用可提供便捷的宏 WSUCS2String(container)WSUTF8String(container)WSUTF16String(container)WSUTF32String(container) 来获取容器内字符串的第一个代码单元的指针.
  • 使用可提供便捷的宏 WSUnicodeStringType(container) 来访问容器内字符串的 WSUnicodeContainerType 值.
  • 这些可提供便捷的宏在 WSUnicodeContainer 的指针上运行.
  • 多数情况下,程序员不需要访问 WSUnicodeContainer 对象的内容,而是可以在使用以下 mprep 返回类型之一时将其作为一个返回值传递给某 WSTP 模板函数:UCS2String, UCS2Symbol, UTF8String, UTF8Symbol, UTF16String, UTF16Symbol, UTF32String, 和 UTF32Symbol.
  • 使用 WSTP API 函数 WSNewUnicodeContainer() 来分配一个新的容器对象. 可用 WSReleaseUnicodeContainer() 来释放该对象使用的内存.
  • 多数情况下,程序员不需要直接调用 WSReleaseUnicodeContainer() 来释放一个 WSUnicodeContainer 对象,而是可以使用 mprep,它会生成可自动释放一个 WSUnicodeContainer 对象的代码.
  • WSTP 的标头文件 wstp.h 已对 WSUnicodeContainer 作出声明.

范例

基本范例  (1)

#include "wstp.h"

/* A simple function for sending a Unicode string using a WSUnicodeContainer object */

void f(WSUnicodeContainer *container, WSLINK link)
{
    if(container == (WSUnicodeContainer *)0)
        return;

    switch(WSUnicodeStringType(container))
    {
        case UCS2ContainerType:
            if(! WSPutUCS2String(link, WSUCS2String(container),
                WSUnicodeStringLength(container)))
            { /* Unable to send the UCS-2 encoded string */ }
            break;
        case UTF8ContainerType:
            if(! WSPutUTF8String(link, WSUTF8String(container),
                WSUnicodeStringLength(container)))
            { /* Unable to send the UTF-8 encoded string */ }
            break;
        case UTF16ContainerType:
            if(! WSPutUTF16String(link, WSUTF16String(container),
                WSUnicodeStringLength(container)))
            { /* Unable to send the UTF-16 encoded string */ }
            break;
        case UTF32ContainerType:
            if(! WSPutUTF32String(link, WSUTF32String(container),
                WSUnicodeStringLength(container)))
            { /* Unable to send the UTF-32 encoded string */ }
            break;
    }

    WSReleaseUnicodeContainer(container);
}