WSResolveCallbackFunction (C 関数)

WSENVオブジェクト,WSServiceRefオブジェクト,サービス名を持つconst char *文字列,リンク名を持つconst char *文字列,リンクプロトコルを持つconst char *文字列,リンクオプションを持つint,コンテキストオブジェクトとしてのvoid *オブジェクトを取り,voidを返す関数への関数ポインタを説明するWSTPのタイプである.

詳細

  • 関数WSResolveLinkService()は,WSTPのサービス名を,サービスへのリンクを設定するのに必要な接続詳細に変換するネットワーク上の変換操作を開始する.WSResolveLinkService()は,操作を始め,すぐに返す.WSTPライブラリは,接続詳細を型WSResolveLinkServiceの関数を通してアプリケーションに非同期的に送る.
  • WSResolveLinkService関数は次の形式を持つ.
  • void function( WSENV e, WSServiceRef r, const char *serviceName, const char *linkName, const char *protocol, int options, void *context);
  • WSTPリンクサービスは主にネットワークで使用できるサービスを使うので,プロトコルオプションはほとんど常に"TCPIP"である.
  • リンク名,プロトコル,オプションの引数の組合せは,名前付きのサービスに接続するリンクを作成するのに十分である.リンクは, -linkmode connectあるいは-linkconnectを使って,接続モードで作成しなければならない.

例題

  (1)

#include <string.h> /* for memset, memcpy, etc... */
#include <stdio.h> /* for snprintf */
#include "wstp.h"

void ResolveCallbackFunction(WSENV e, WSServiceRef r, const char *serviceName, const char *linkName, const char *protocol, int options, void *context);

WSServiceRef startResolvingServiceWithName(WSENV e, const char *name)
{
    WSServiceRef theRef;
    int apiResult = 0;

    apiResult = WSResolveLinkService(e, ResolveCallbackFunction, name,
        NULL /* No context object for this example */, &theRef);
    if(apiResult != 0)
    { /* Handle the error */ }

    return theRef;
}


void ResolveCallbackFunction(WSENV e, WSServiceRef r, const char *serviceName, const char *linkName, const char *protocol, int options, void *context)
{
    WSLINK newLink = (WSLINK)0;
    int error = 0;
    int argc = 0;
    const char *argv[] = {
        "Dummy value representing program name",
        "-linkname",
        (const char *)0,
        "-linkprotocol",
        (const char *)0,
        "-linkconnect",
        "-linkoptions",
        (const char *)0,
        /* The following NULL pointer terminates the argv array */
        (const char *)0
    };

    char optionsBuffer[50];

    memset((void *)optionsBuffer, 0, sizeof(char) * 50));

    snprintf(optionsBuffer, 50, "%d", options);

    argv[2] = linkName;
    argv[4] = protocol;
    argv[7] = (const char *)optionsBuffer;

    argc = 8;

    newLink = WSOpenArgcArgv(e, argc, argv, &error);
    if(newLink == (WSLINK)0 || error != WSEOK)
    { /* Handle the error */ }

    /* ... */

    return;
}