Zabrałem się za implementację ole-drag-drop dla menuitems (ala menu start)
Wszystko już działa oprócz eventu drop - program dostaje kopa a błąd jest gdzieś w instancji ole 0x12F3FE (na 100% to nie jest moja instancja)
Zaimplementowałem IDataObject, IDropSource, IDropTarget, IEnumFORMATETC, IExternalConnection, IStdMarshalInfo i chwilowo IMarshal, ale z nim program się zapętlał: ciągle tworzył nową instancję IDataObject albo dodawał do niej referencję
Brakuje mi tylko implementacji CoClass IdentityUnmarshal i tajemniczego "4C1E39E1-E3E3-4296-AA86-EC938D896E92"
Google nie potrafi pomóc bo nikt nie wie jak otrzymać notify WM_MENUGETOBJECT
Ja dostaję tą notyfikację i zwracam instancję mojego IDropTarget
Inny problem: RegisterDragDrop() blokuje mi IDataObject - gdy zamykam program - ta klasa ma dwie dodatkowe referencje. Oczywiście najpierw robię RevokeDragDrop i OleUninitialize(), ale potem w pętli muszę zrobić:
while (pDataObject->Release())
żeby zwolnić pamięć
Może ktoś to robił i mi podpowie co może być źle
małe demko: przeciągnij jakiegoś itema z menu na okno - nic się nie stanie
przeciągnij na menu - bum!
http://free.of.pl/s/sapero/dragdrop_menu_all.zip
w dodatkowym oknie konsoli widać jakie metody są wywoływanie i adres skąd zostały wywołane