[gme-users] Passing user data in for events.
Peter Volgyesi
peter.volgyesi at vanderbilt.edu
Tue Dec 6 16:05:57 CST 2005
Daniel,
The current implementation of the MGA library does not pass the associated
value to add-ons (it passes a null value). So, this feature can be used only
with "regular" territory based event handlers at this moment (interpreters,
plug-ins). Do you really use/need the add-on interface on the receiver side
?
If you have the source code of GME you can check out the relevant C++ code
in MgaFCO.cpp (gme/mga folder) in HRESULT FCO::objrwnotify() (line 813):
COMTHROW(t->handler->ObjectEvent(tt, mmask, nil));
Sorry for the bad news.
--
Peter Volgyesi
Vanderbilt University, ISIS
> -----Original Message-----
> From: gme-users-bounces at list.isis.vanderbilt.edu
> [mailto:gme-users-bounces at list.isis.vanderbilt.edu] On Behalf
> Of Daniel Waddington
> Sent: Monday, December 05, 2005 8:06 AM
> To: A list for GME users to share thoughts and discuss bugs and fixes.
> Subject: Re: [gme-users] Passing user data in for events.
>
> Hi Zoli,
>
> I check the variant at the client side before SendEvent by
> checking CurrentAssociation; it seems to set up fine. On the
> receiver (GME) side, the object raising the event in
> objectEventPerformed is
> definitely the "Root Folder" object, but VARIANT v is always empty.
> I checked the associated value with f->getFolderI()-
> >get_CurrentAssociation(&var), but this is also empty.
>
> Any ideas how I can proceed? I wonder if it is some .NET COM
> wrapper thing that is screwing something up??
>
> Thanks,
> Daniel.
>
> On Dec 2, 2005, at 6:56 PM, Zoltan Molnar wrote:
>
> > I tried in a Raw COM interpreter (not /CLR compiled
> project), and it
> > goes on the "Equal branch".
> >
> > Br,Zoli
> >
> > STDMETHODIMP RawComponent::InvokeEx( IMgaProject *project, IMgaFCO
> > *currentobj,
> >
> > IMgaFCOs *selectedobjs, long param) {
> > COMTRY {
> > if(interactive) {
> > CComBSTR projname;
> > CComBSTR focusname = "<nothing>";
> > CComPtr<IMgaTerritory> terr;
> > COMTHROW(project->CreateTerritory(NULL, &terr));
> > COMTHROW(project->BeginTransaction(terr));
> > try {
> > COMTHROW(project->get_Name(&projname));
> >
> > CComPtr<IMgaFolder> fld;
> > COMTHROW( project->get_RootFolder( &fld));
> > if( fld)
> > {
> > CComBSTR var( L"EXTRADATA");
> > CComVariant var2( var);
> > //fld->Associate( var2);
> > terr->Associate( fld, var2);
> >
> > CComVariant extr_var2;
> > fld->get_CurrentAssociation(
> > &extr_var2);
> > CComBSTR extr_var;
> > extr_var2.CopyTo( &extr_var);
> >
> > if( extr_var && extr_var.Length() ==
> > var.Length() && extr_var.operator ==( var))
> > {
> > int i = 0;
> > ++i;
> > AfxMessageBox( "Equal, so it is
> > working");
> > }
> > else
> > AfxMessageBox( "Not equal. It is
> > NOT working !!!");
> > }
> > COMTHROW(project->CommitTransaction());
> > } catch(...) { project->AbortTransaction(); throw;
> > }
> >
> > }
> > } COMCATCH(;);
> > }
> >
> >> -----Original Message-----
> >> From: gme-users-bounces at list.isis.vanderbilt.edu
> >> [mailto:gme-users-bounces at list.isis.vanderbilt.edu] On Behalf Of
> >> Daniel Waddington
> >> Sent: Friday, December 02, 2005 2:39 PM
> >> To: gme-users
> >> Subject: Re: [gme-users] Passing user data in for events.
> >>
> >>
> >> Zoli,
> >>
> >> I did try this and VARIANT v is still empty - do I need to do
> >> something else to get hold of it?
> >>
> >> Thanks,
> >> Daniel.
> >>
> >> Zoltan Molnar wrote:
> >>> Please try to use
> >>>
> >>> gme.RootFolder.Associate( filename);
> >>>
> >>> Instead of
> >>>
> >>>
> >>>> terr.Associate((MGALib.MgaObject)gme.RootFolder,filename);
> >>>
> >>>
> >>> Br, Zoli
> >>>
> >>>
> >>>> -----Original Message-----
> >>>> From: gme-users-bounces at list.isis.vanderbilt.edu
> >>>> [mailto:gme-users-bounces at list.isis.vanderbilt.edu] On Behalf Of
> >>>> Daniel Waddington
> >>>> Sent: Friday, December 02, 2005 2:10 PM
> >>>> To: gme-users
> >>>> Subject: [gme-users] Passing user data in for events.
> >>>>
> >>>>
> >>>> Hi,
> >>>>
> >>>> I am using a .NET object to trigger an event on a Root Folder
> >>>> object through the IMgaProject interface. But I can't
> seem to get
> >>>> the VARIANT param filled in on the AddOn side (which is handling
> >>>> the event).
> >>>>
> >>>> this is what I do...
> >>>>
> >>>> gme.BeginTransaction
> >>>> (terr,MGALib.transactiontype_enum,.TRANSACTION_GENERAL);
> >>>> gme.CreateTerritory(null, out terr, null);
> >>>>
> >>>> string userdata = "hello";
> >>>> terr.Associate((MGALib.MgaObject)gme.RootFolder,filename);
> >>>>
> >>>> gme.RootFolder.SendEvent(0x00010000);
> >>>> gme.CommitTransaction();
> >>>>
> >>>> But on the other side the variant is empty. What am I do wrong?
> >>>>
> >>>> Thanks,
> >>>> Daniel.
> >>>>
> >> _______________________________________________
> >> gme-users mailing list
> >> gme-users at list.isis.vanderbilt.edu
> >> http://list.isis.vanderbilt.edu/mailman/listinfo/gme-users
> >>
> > _______________________________________________
> > gme-users mailing list
> > gme-users at list.isis.vanderbilt.edu
> > http://list.isis.vanderbilt.edu/mailman/listinfo/gme-users
>
> ===============================
> Dr. Daniel G. Waddington
> Lockheed Martin ATL
> 3 Executive Campus, 6th Floor
> Cherry Hill, NJ 08002
> Tel:856 792 9740
> ===============================
>
>
>
>
> _______________________________________________
> gme-users mailing list
> gme-users at list.isis.vanderbilt.edu
> http://list.isis.vanderbilt.edu/mailman/listinfo/gme-users
More information about the gme-users
mailing list