64,654
社区成员
发帖
与我相关
我的任务
分享
public delegate void setlocal(ref string strXml);
[ComVisible(true)]
[Guid("44E5D2FC-8E64-4b13-8600-EF87F2669FB2")]
public interface IBusiness
{
[DispId(184)]
void doSomething(ref string strExchangeData);
}
[ComVisible(true)]
[Guid("8D1B96E5-73A3-4d23-A940-B36327790B7B")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IBusinessEvents
{
[DispId(180)]
void doBackevent(ref string strExchangeData);
}
[ComVisible(true)]
[Guid("08E5B21E-4389-47ab-990B-109F57C8FBF7")]
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(IBusiness))]
[ComSourceInterfaces(typeof(IBusinessEvents))]
public class EnoviaBusiness : IBusiness
{
public event setlocal doBackevent;
public void doSomething(ref string strExchangeData)
{
}
public void doBack(ref string strExchangeData)
{
if(null != doBackEvent)doBackEvent(...);
}
}
class EventReceiver : public IDispEventImpl<0, EventReceiver, &EnoviaInterface::DIID_IBusinessEvents, &EnoviaInterface::LIBID_EnoviaInterface, 1, 0>
{
public:
STDMETHODIMP EventReceiver::EventNotify(BSTR* strXml)
{
//printf("EventReceiver : %d\n", i);
MessageBox(NULL, L"OK!", L"OK!", 0);
return S_OK;
}
BEGIN_SINK_MAP(EventReceiver)
SINK_ENTRY_EX(0, EnoviaInterface::DIID_IBusinessEvents, 180, EventNotify)
END_SINK_MAP()
};
EventReceiver * pReceiver = new EventReceiver;
hr = pReceiver->DispEventAdvise(pBus);
可实际上就是不行。hr返回S_OK,但COM组件中,事件委托仍然是空。
能说详细些吗?因为这个COM组件是用C#写的,貌似我没有找到您说的两个方法。[/quote]
所以这就是问题所在了,C++中的使用流程就是这样,C#中我就不清楚了[/quote]