使用ATL将类厂注册为MULTPLEUSER,在XP下正常,所有的client都会连接到一个COM实例上。
但是到了vista下,由于用户权限的问题,vista会自动的为在不同的上下文下的COM请求生成不同的实例,不知道如何解决。
初学COM,请高手指教!
但是到了vista下,由于用户权限的问题,vista会自动的为在不同的上下文下的COM请求生成不同的实例,不知道如何解决。
初学COM,请高手指教!
解决方案 »
- 数据库连接和记录集应该在哪里调用close()和release()?析构函数还是其他?为什么?
- 如何打印和打印预览FormView 中的ListCtrl中的数据.
- 玩过Gina dll 更换登录界面的大虾, 进来看看小弟的一个问题, 弄了N天了, 还是不成功,
- 求数字图形拉伸算法
- 关于GetOpenFileNamePreview的问题
- extern "C" _declspec(dllexport)谁能给解释一下这条语句?
- CListCtrl 问题,200分
- 各位高手请进 急急!!!!!
- 一个关于CTI技术的问题
- 请问有没有将SHP文件转换为WMF文件的源码??或者别的文件转化为WMF文件的??(在线)
- 一个数据包recv要多次收才能收到才3K数据,是什么原因,收发缓存都8K?????
- 客户进程能否共享COM服务器的数据?
来了请求第一个创建实例,后面请求,发现已经创建,就直接处理
看看这个链接,他是通过CoInitializeSecurity解决了uac下的单实例问题。
也有人提出利用service来解决的方案。
LPDISPATCH pWMPDispatch = NULL; AfxCheckError(::CLSIDFromProgID(_T("COMServer.application"), &clsidWMP)); IID_IDispatch, (LPVOID*)&pWMPDispatch);
LPUNKNOWN lpUnk;
HRESULT hr = ::GetActiveObject(clsidWMP, NULL, &lpUnk);
if (hr == NOERROR)
{
HRESULT hr = lpUnk->QueryInterface(IID_IDispatch,
(LPVOID*)&pWMPDispatch);
lpUnk->Release();
if (hr == NOERROR)
m_Comserver.AttachDispatch(pWMPDispatch, TRUE);
}
if (m_Comserver.m_lpDispatch == NULL)
{
m_Comserver.CreateDispatch(clsidWMP);
}
来了请求第一个创建实例,后面请求,发现已经创建,就直接处理
或者加一个互斥
HRESULT hr;
DWORD m_dwCookie;
hr=RegisterActiveObject(GetControllingUnknown(),
clsid,
ACTIVEOBJECT_WEAK,
&m_dwCookie);
if(FAILED(hr))
{
AfxMessageBox(_T("Didn't register Active Object"));
}然后在客户端调用的时候用我上面的代码就OK
来了请求第一个创建实例,后面请求,发现已经创建,就直接处理
来了请求第一个创建实例,后面请求,发现已经创建,就直接处理