- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试在现有 COM 组件中构建连接点。我从 CCmdTarget 派生类,并按照 MSDN 中的描述在类声明和实现中调用 MFC 宏。组件已正确构建、链接和运行。但是,当我调试我的客户端应用程序时,我看到以下问题:
客户端找到了正确的组件,找到了连接点容器,但在 FindConnectionPoint 上失败并返回 E_NOINTERFACE。我怀疑我必须添加或修改一些 MFC 宏才能将我的连接点包含到容器中,但不确定如何执行此操作。
所以,请帮我解决这个问题,或者给我一个提示,告诉我在哪里可以找到这个问题。
提前致谢, 豪沃
[ uuid(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx), version(1.0) ]
library SMC
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
[
uuid(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx),
helpstring("_IAdHocPresenceEvents Interface")
]
interface _IAdHocPresenceEvents : IUnknown
{
[id(1), helpstring("method OnAdHocPresenceQuery")] HRESULT OnAdHocPresenceQuery();
};
#include "ISMCLink.idl"
[ uuid(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) ]
coclass SMCLink
{
dispinterface IDispSMCLink;
[default] interface ISMCLink;
interface ISMCLink2;
[default, source] interface _IAdHocPresenceEvents;
};
};
[
helpstring("Interface to control My Product"),
uuid(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx),
dual,
oleautomation
]
interface ISMCLink : IDispatch
{
//...
/**
* RequestAdHocPresence
*
* Sends Ad Hoc Presence Query
*
* @param SIP address.
*
* @return S_OK if the In session window was opened successfully
*/
[id(0x00000001), helpstring("method Request for Ad Hoc Presence")]
HRESULT RequestAdHocPresence([in] BSTR user);
};
// Primary dispatch interface for SMC
[ uuid(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) ]
dispinterface IDispSMCLink
{
interface ISMCLink;
};
// Definition for the new interface ISMCLink2
// ------------------------------------------
[
helpstring("ISMCLink2, Interface to access My Product"),
uuid(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx),
dual,
oleautomation
]
interface ISMCLink2 : ISMCLink
{
//...
};
namespace MYPROD {
class SMCLink : public CCmdTarget
{
//...
protected:
DECLARE_MESSAGE_MAP()
DECLARE_DISPATCH_MAP()
DECLARE_INTERFACE_MAP()
// Connection point for ISMCLink interface
BEGIN_CONNECTION_PART(SMCLink, AdHocPresenceEvents)
CONNECTION_IID(IID__IAdHocPresenceEvents)
END_CONNECTION_PART(AdHocPresenceEvents)
DECLARE_CONNECTION_MAP()
public:
SMCLink(void);
virtual ~SMCLink(void);
// to be OLE creatable, it must be DYNCREATE and OLECREATE
DECLARE_DYNCREATE(SMCLink)
DECLARE_OLECREATE(SMCLink)
//..
/**
* RequestAdHocPresence
*
* Sends Ad Hoc Presence Query
*
* @param SIP address.
*
* @return S_OK if the In session window was opened successfully
*/
afx_msg HRESULT RequestAdHocPresence(BSTR sipAddr);
BEGIN_DUAL_INTERFACE_PART(DualSMCLink, ISMCLink)
//...
STDMETHOD(RequestAdHocPresence)(THIS_ BSTR user);
END_DUAL_INTERFACE_PART(DualSMCLink)
};
} // namespace MYPROD
namespace MYPROD {
BEGIN_MESSAGE_MAP(SMCLink, CCmdTarget)
//{{AFX_MSG_MAP(CAutoProxy)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
IMPLEMENT_DYNCREATE(SMCLink, CCmdTarget)
BEGIN_DISPATCH_MAP(SMCLink, CCmdTarget)
//{{AFX_DISPATCH_MAP(SMCLink)
//..
DISP_FUNCTION(SMCLink, "RequestAdHocPresence", RequestAdHocPresence, VT_ERROR, VTS_BSTR)
//}}AFX_DISPATCH_MAP
END_DISPATCH_MAP()
BEGIN_INTERFACE_MAP(SMCLink, CCmdTarget)
INTERFACE_PART(SMCLink, IID_ISMCLink, DualSMCLink)
INTERFACE_PART(SMCLink, IID_ISMCLink2, DualSMCLink)
INTERFACE_PART(SMCLink, IID_IConnectionPointContainer, ConnPtContainer)
END_INTERFACE_MAP()
BEGIN_CONNECTION_MAP(SMCLink, CCmdTarget)
CONNECTION_PART(SMCLink, IID_IConnectionPointContainer, AdHocPresenceEvents)
END_CONNECTION_MAP()
SMCLink::SMCLink(void)
{
EnableAutomation();
EnableConnections();
}
SMCLink::~SMCLink(void)
{
//..
if (registerCookie_ != 0)
RevokeActiveObject(registerCookie_, NULL);
}
void SMCLink::registerActive()
{
HRESULT hRes;
hRes = RegisterActiveObject(GetInterface(&IID_IUnknown),
SMCLink::guid, NULL, ®isterCookie_);
//..
}
//..
afx_msg HRESULT SMCLink::RequestAdHocPresence(BSTR sipAddr)
{
Sleep(1000);
::MessageBox(NULL, L"RequestAdHocPresence", L"RequestAdHocPresence", 0);
Fire_AdHocPresenceStatus(); // HOWTO ???
return S_OK;
}
STDMETHODIMP SMCLink::XDualSMCLink::RequestAdHocPresence(BSTR user)
{
METHOD_PROLOGUE(SMCLink, DualSMCLink)
return pThis->RequestAdHocPresence(user);
}
} // namespace MYPROD
CLSID clientCLSID;
if (FAILED(CLSIDFromProgID(A2BSTR("SMC.SMCLink"), &clientCLSID)))
{
clientCLSID = SMC::CLSID_SMCLink;
}
LPUNKNOWN lpUnk;
SMC::ISMCLink* m_pSMCLink = NULL;
if (m_pSMCLink == NULL)
{
if (GetActiveObject(clientCLSID, NULL, &lpUnk) == NOERROR)
{
hr = lpUnk->QueryInterface(SMC::IID_ISMCLink, (LPVOID*)&m_pSMCLink);
lpUnk->Release();
}
}
hr = m_pSMCLink->RequestAdHocPresence(A2BSTR("someuser@mydomain"));
// this returns S_OK
IConnectionPointContainer * pConnPtContainer = NULL;
IConnectionPoint * pCP2 = NULL; //these are declared as a member
//check if this interface supports connectable objects
hr = m_pSMCLink->QueryInterface(IID_IConnectionPointContainer,(void **)&pConnPtContainer);
// this returns S_OK
IEnumConnectionPoints* pEnum = NULL;
hr = pConnPtContainer->EnumConnectionPoints( &pEnum );
// this returns S_OK
hr = pConnPtContainer->FindConnectionPoint(IID__IAdHocPresenceEvents, &pCP2);
// this returns E_NOINTERFACE
// ..
最佳答案
CONNECTION_PART(SMCLink, IID_IConnectionPointContainer, AdHocPresenceEvents)
第二个参数应该是an IID of connection pointer interface .
关于c++ - FindConnectionPoint 返回 E_NOINTERFACE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8430773/
我有一个COM客户端和一个COM服务器,COM服务器持有客户端暴露的接口(interface),现在客户端实际上只是一个EXE,我如何确保客户端暴露的接口(interface)对服务器可见? 因为当我
我正在从 C++ 非托管代码调用 C# 方法。我在从数组中返回的类实例获取值时遇到问题。 我稍微简化了代码 这是有问题的方法。 [return: MarshalAs(UnmanagedType
我正在尝试在现有 COM 组件中构建连接点。我从 CCmdTarget 派生类,并按照 MSDN 中的描述在类声明和实现中调用 MFC 宏。组件已正确构建、链接和运行。但是,当我调试我的客户端应用程序
我正在尝试为我拥有的 COM 对象(名为 SC_COM.dll)生成 C# 包装器,但在将它与 Visual Studio 2008(运行 Vista)链接时遇到一些问题。我需要使用 COM DLL
我已经成功编译并注册了一个直接显示过滤器。现在我想在我的代码中使用它。但是对 COCreateInstance 的调用返回错误代码 E_NOINTERFACE。 这是我的过滤器的注册码 #inclu
注意: 使用 CoGetClassObject , 通过在系统注册表中有 CLSID 的类对象创建多个对象 单线程单元 例如: hresult = CoInitializeEx(NULL, COINI
在我使用 DirectX11 设计的渲染器中,我需要能够随时创建交换链,但是我使用的方法在 CreateSwapChain() 调用时崩溃了: IDXGIDevice * device;
我正在尝试创建一个指定的 D3D12 设备 https://msdn.microsoft.com/en-us/library/dn899120%28v=vs.85%29.aspx 我有 NVidia
我刚刚开始使用 Dx11。 D3DX11CreateEffectFromMemory 正在返回 E_NOINTERFACE。 我知道 E_NOINTERFACE 在 COM 方面意味着什么,但我不知道
我负责 C# 应用程序 (VS 2005) 的维护。此 C# 应用程序调用一个 dll(“mydll.dll”)。我需要对有问题的 dll 进行一些更改。 我有一个用 Visual Basic 6.0
我正在使用 CoCreateInstance 函数创建与指定 CLSID 关联的类的单个对象。它返回 E_NOINTERFACE。 我检查了注册表,CLSID 是正确的。被调用对象dll的路径在注册表
我正在尝试从我的集成相机上的输出引脚检索 IAMStreamConfig 接口(interface),但是 E_NOINTERFACE 失败。 我将 IntCam 用作测试设备,实际上我将有一个带有两
我已经搞不清是应该从我的 COM 服务器方法返回 E_NOTIMPL 还是 E_NOINTERFACE。 我有一个类有两个函数,我从我继承的类中覆盖了这两个函数,这两个函数什么都不做,因为它们目前还没
我有一个 COM 类 CMyCOMServer 在一个应用程序中实现了 IMyInterface,两者都具有正确的 GUID。如果请求 IUnknown 或 IMyInterface,CMyCOMSe
我有一个由 VB6 COM 对象实现的接口(interface) (ITask)。我有一个使用该接口(interface)的 C++ COM 对象,它通常工作正常。 但是,当我运行 VB6 调试器来调
我正在尝试从 64 位应用程序创建 32 位 COM 对象。 我在 CoCreateInstance 调用中使用了 CLSCTX_LOCAL_SERVER,并且我向 AppId 添加了一个空的 Dll
我一直在尝试制作一个利用桌面复制 api 的应用程序,但没有使用 directx 的经验,结果证明这是一个相当大的挑战。似乎一切正常,直到我调用 output1->DuplicateOutput(),
嗨 Stack Overflow 成员, 我是 C# 编程的新手。我正在开发一个基本的相机流和静态捕获应用程序。一旦用户静止不动,我将使用 VMR9 的位图混合概念在叠加层上显示它。 我做了什么? 我
我正在尝试使用 IFileSystemImage2 接口(interface)使用 Imapi2 创建具有多个引导记录的 ISO。 为此,我应该能够使用 put_BootImageOptionsArr
我正在尝试在我的 Win32 应用程序中嵌入一个 WMP 控件。我在这里遵循了示例代码:Hosting the Windows Media Player Control in a Windows Ap
我是一名优秀的程序员,十分优秀!