WSNewUnicodeContainer (C 関数)
WSUnicodeContainer * WSNewUnicodeContainer(void *s, int l, enum WSUnicodeContainerType t)
長さ l のUnicode の文字列 s の内容のコピー,タイプ t の文字列を含む新しいUnicodeのコンテナを割り当てて返す.
詳細
- WSNewUnicodeContainer()は,解放されなければならないUnicodeの文字列 s を保存するためのメモリを割り当てる.そのメモリを解放するためには,WSNewUnicodeContainer()によって返されるWSUnicodeContainer *オブジェクトについてWSReleaseUnicodeContainer()を呼び出すとよい.
- WSNewUnicodeContainer()は,エラーがあった場合にはNULLを返す.
- WSTPテンプレートファイルで使えるようにWSUnicodeContainerオブジェクトを割り当てる場合に,WSNewUnicodeContainer()を使う.
- WSNewUnicodeContainer()は,WSTPテンプレートファイルでWSUnicodeContainerオブジェクトを作成したり破壊したりするために,WSReleaseUnicodeContainer()と一緒に使われる.WSNewUnicodeContainer()は,テンプレートファイル内の関数間でUnicodeの文字列とその長さを渡すのに便利なオブジェクトである.
- WSNewUnicodeContainer()は,WSTPヘッダファイルwstp.hの中で宣言される.
例題
例 (1)
#include "wstp.h"
/* A WSTP template program for converting a string to a symbol */
:Begin:
:Function: convertStringToSymbol
:Pattern: ConvertStringToSymbol[string_String]
:Arguments: {string}
:ArgumentTypes: {String}
:ReturnType: UTF8Symbol
:End:
WSUnicodeContainer * convertStringToSymbol(const char *s)
{
WSUnicodeContainer *newContainer;
WSLINK link;
int error;
unsigned char *utf8String;
int utf8Length, utf8Chars;
/* Use a loopback link to convert the string from Mathematica
form to a UTF-8 encoded version */
link = WSLoopbackOpen(stdenv, &error);
if(link == NULL || error != WSEOK)
{ /* Unable to create loopback link */ }
if(! WSPutString(link, s))
{ /* Unable to send the string to the loopback link */ }
if(! WSFlush(link))
[ /* Unable to flush the link buffers */ }
if(! WSGetUTF8String(link, &utf8String, &utf8Length, &utf8Chars))
{ /* Unable to read the UTF-8 encoded string */ }
/* The WSUnicodeContainer object is just for passing around
Unicode strings and their lengths in an easy manner. The
WSTP template code will call WSReleaseUnicodeContainer()
for the memory allocated by WSNewUnicodeContainer() */
/* UTF8ContainerType is the enum value that indicates the
WSUnicodeContainer object contains an UTF-8 encoded string */
newContainer = WSNewUnicodeContainer(utf8String, utf8Length,
UTF8ContainerType);
WSReleaseUTF8String(link, utf8String, utf8Length);
return newContainer;
}
int main(int argc, char **argv)
{
return WSMain(argc, argv);
}