WSResolveCallbackFunction (C 函数)
是一个 WSTP 类型,描述一个函数的函数指针,该函数以一个 WSENV 对象、一个 WSServiceRef 对象、一个有服务名称的 const char * 字符串、一个有链接名称的 const char * 字符串、一个有链接协议的 const char * 字符串、一个有链接选项的 int 和一个 void * 对象作为上下文对象,并返回 void.
更多信息
- 函数 WSResolveLinkService() 在网络上开始一段分解操作,将一个 WSTP 的服务名称转换为向服务建立一个链接所需的连接详情. WSResolveLinkService() 开始这段操作并立即返回. WSTP 库异步通过类型为 WSResolveCallbackFunction 的函数向应用异步递送连接详情.
- WSResolveLinkService 函数有如下形式:
- void function( WSENV e, WSServiceRef r, const char *serviceName, const char *linkName, const char *protocol, int options, void *context);
- 由于 WSTP 链接服务主要包括通过网络可用的服务,大部分协议选项会是“TCPIP”.
- 链接名称、协议和选项参数的结合足够用来创建能连接具名服务(named service)的链接. 这个链接必须用 -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;
}