Здравствуйте!
Угораздило меня полезть в малознакомую мне тему — работа с COM на уровне C++/ATL/MFC. Потому как ни привычный Delphi, ни семейство .NET не пожелали работать с этим актив-иксом

Delphi падает при вызове метода, нормально читая проперти, в .NET не приходят event-ы. Примеры есть на VB6 и на нем (точнее на VBA в excel) они работают.
Сделал тестовую программу на MFC с ConnectionPoints по
статьеАвтор(ы): Евгений Щербатов
Дата: 18.04.2001
Статья посвящена технологии Connection Points в программах на MFC. Автор кратко описывает сущность и назначение этой технологии, а затем демонстрирует создание COM-клиента и COM-сервера на базе MFC с её использованием.
. Работает, но не могу добраться до аргументов обработчикой событий

Вопрос в том, как правильно описать функцию-обработчик и использовать в ней переданный параметр... Три дня поиска по сайту и msdn ситуацию не прояснили...
в VBA это выглядело так:
Private Sub on_Iam(ByVal service As BACNETLib.IIam)
'... использую ...
Debug.Print service.network
В C++ сделал:
.h:
#import "../bacnet/bacnetx.dll" named_guids no_namespace
// ...
DECLARE_DISPATCH_MAP()
DECLARE_INTERFACE_MAP()
/* IDL:
[
odl,
uuid(93F6D2DF-7002-11D5-A66F-0050DA883529),
helpstring("IIam Interface"),
dual,
oleautomation
]
interface IIam : IDispatch {
[id(0x00000005), propget, helpstring("property network")]
HRESULT network([out, retval] long* pVal);
// ...
struct __declspec(uuid("a4234400-6697-11d5-a66d-0050da883529"))
_IApplicationLayerEvents : IDispatch
{
//
// Wrapper methods for error-handling
//
// Methods:
HRESULT Iam (
struct IIam * service );
*/
void OnBacnetIam(IIam *srv);
.cpp
BEGIN_DISPATCH_MAP(CBacnetDlg, CDialog)
DISP_FUNCTION(CBacnetDlg, "Iam", OnBacnetIam, VT_EMPTY, VTS_DISPATCH)
END_DISPATCH_MAP()
BEGIN_INTERFACE_MAP(CBacnetDlg, CDialog)
INTERFACE_PART(CBacnetDlg, DIID__IApplicationLayerEvents, Dispatch)
END_INTERFACE_MAP()
void CBacnetDlg::OnBacnetIam(IIam *srv)
{
long x = srv->network;
// тут падаем:( ... network - "long IIam::network"
В обработчик вроде бы нормально все передается, в Watches видно IDispatch и IUnknown "содержимое" Iam. При обращении к проперти — как правило "Неверное значение ESP — возможно неправильное соглашение о вызове" или First-chance exception и выход из метода/отладчика.