DDE服务器应用程序使用NDdeShareAdd功能创建DDE共享。
在创建DDE共享之前,最好使用NDdeIsValidShareName和NDdeIsValidAppTopicList功能来验证建议的共享名称和主题名称是否有效。这些功能也被NDdeShareAdd调用。
以下示例演示如何创建DDE共享。它使用NULL自由访问控制列表(DACL)来向所有用户授予写访问权限。请注意,这与在NDdeShareAdd的【pSD】参数中指定NULL不同。
BOOL MyCreateDdeShare( LPTSTR lpszShareName, LPTSTR lpszTopicList )
{
NDDESHAREINFO ndsi;
PSECURITY_DESCRIPTOR pSD = NULL;
//其中lpszShareName是共享名。
if( NDdeIsValidShareName( lpszShareName ) == FALSE )
return FALSE;
//其中lpszTopicList是一个以null结尾的字符串结束的列表
//另一个空字符
if( NDdeIsValidAppTopicList( lpszTopicList ) == FALSE )
return FALSE;
//填写NDDESHAREINFO结构。
ndsi.lRevision = 1;
ndsi.lpszShareName = lpszShareName;
ndsi.lShareType = SHARE_TYPE_STATIC;
ndsi.lpszAppTopicList = lpszTopicList;
ndsi.fSharedFlag = TRUE;
ndsi.fService = FALSE;
ndsi.fStartAppFlag = TRUE;
ndsi.nCmdShow = SW_SHOWNORMAL;
ndsi.cNumItems = 0;
ndsi.lpszItemList = "";
//创建安全描述符以允许写访问。
pSD = (PSECURITY_DESCRIPTOR) LocalAlloc(
LPTR,
SECURITY_DESCRIPTOR_MIN_LENGTH );
InitializeSecurityDescriptor( pSD, SECURITY_DESCRIPTOR_REVISION );
SetSecurityDescriptorDacl( pSD, TRUE, (PACL)NULL, FALSE );
//删除可能的旧DDE共享。
NDdeShareDel(
NULL,
lpszShareName,
0
);
//创建DDE共享。
NDdeShareAdd(
NULL,
2,
pSD,
(LPBYTE)&ndsi,
sizeof(NDDESHAREINFO)
);
LocalFree( pSD );
return TRUE;
}
以下示例显示如何调用MyCreateDdeShare函数创建共享MyDdeShare $:
char *TopicList = "\0\0MyApp|MyTopic\0\0";
MyCreateDdeShare( "MyDdeShare$", TopicList );
此共享名称以美元符号($)结尾,表示它是静态DDE共享。主题字符串仅为静态类型的DDE共享提供。