我最近开始使用动态虚拟频道。
https://docs.microsoft.com/en-us/windows/desktop/termserv/dvc-implementation-details
我已经使用Static频道很长时间了,并且能够开发一个可以监听多个频道的插件。
我的问题是我无法使动态虚拟通道与多个侦听器一起使用。我需要使用DVC解决静态通道遇到的一些并发问题。
这是我对单个通道的初始化方法:
HRESULT DVCPlugin::Initialize(__in IWTSVirtualChannelManager *pChannelMgr)
{
HRESULT hr;
CComObject<ListenerCallback> *pListenerCallback;
CComPtr<ListenerCallback> ptrListenerCallback;
CComPtr<IWTSListener> ptrListener;
// Create an instance of the DVCPlugin object.
hr = CComObject<ListenerCallback>::CreateInstance(&pListenerCallback);
ptrListenerCallback = pListenerCallback;
// Attach the callback to the endpoint.
hr = pChannelMgr->CreateListener(
DVC_CHANNEL,
0,
(ListenerCallback*)ptrListenerCallback,
&ptrListener);
if (hr == S_OK) {
MessageBox(NULL, L"DVC plugin is enabled!", L"Info...", MB_OK | MB_ICONWARNING);
}
else {
MessageBox(NULL, L"DVC plugin initialize failure!", L"Info...", MB_OK | MB_ICONWARNING);
}
return hr;
}
这非常适合单个频道。当我尝试添加其他侦听器时,只有最后一个侦听器将处于活动状态。有谁知道如何在initialize方法中添加其他通道?
我的代码基于此: https://docs.microsoft.com/en-us/windows/desktop/termserv/dvc-client-plug-in-example
答案 0 :(得分:0)
找到了使其正常工作的方法。它需要更多的“重复的”代码,但是可以工作。
我首先需要为要添加的每个频道创建一个附加的ListenerCallback和ChannelCallback。这些还为每个通道提供了额外的OnNewChannelConnection和OnDataReceived函数。
然后需要稍微初始化Initialize方法。可能可以进行更多清理,但是可以。
<script>
var flag = true;
function myFunction(){
let el = document.getElementById("demo");
el.style.fontsize = flag ? "25px" : "";
el.style.color= flag ? "#3AF702" : "";
el.style.backgroundcolor=flag ? "red" : "";
flag = !flag;
}
</script>`
<button type="change" onclick="myFunction()">Change!</button>