![]() |
![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
| Welcome to Windows Vista Forums. Our forum is dedicated to helping you find solutions with any problems, errors or issues you are experiencing with Windows Vista. The Vista forum also covers news and updates and has an extensive Windows Vista tutorial section that covers a wide range of tips and tricks. |
| |||||||
![]() |
| |
| | #1 (permalink) |
| | Consuming a .NET event in VBScript Hi! I'm pretty new to .NET and I am trying to have a VBScript consume an event created in a .NET component. I started out with http://msdn.microsoft.com/en-us/library/dd8bf0x3.aspx. I registered the assembly for COM interop and made it COM visible (checkboxes in the Visual Studio 2--8 project properties dialog). This is the .NET Code: using System.Runtime.InteropServices; namespace PureEvents { public delegate void ClickDelegate(int x, int y); public delegate void ResizeDelegate(); // Step 1: Defines an event sink interface (ButtonEvents) to be // implemented by the COM sink. [GuidAttribute("1A585C4D-3371-48dc-AF8A-AFFECC1B0967")] [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)] public interface ButtonEvents { void Click(int x, int y); void Resize(); } // Step 2: Connects the event sink interface to a class // by passing the namespace and event sink interface // ("EventSource.ButtonEvents, EventSrc"). [ComSourceInterfaces(typeof(ButtonEvents))] public class PureEvents { public event ClickDelegate Click; public event ResizeDelegate Resize; public string getValue() { return "Normal method call"; } public PureEvents() { } public void CauseClickEvent(int x, int y) { Click(x, y); } public void CauseResizeEvent() { Resize(); } } } The VBScript code looks like this: sub X_Resize msgBox "Here" end sub set BFI=wscript.createobject("PureEvents.PureEvents","X_") msgBox BFI.GetValue() BFI.CauseResizeEvent msgBox "There" The getValue()-Method gets called properly, so the component itself works. However, when I call CauseResizeEvent, I get an 80004001 error (method or process not implemented". Am I missing anything obvious here? The script does not run in IIS or internet explorer, it just gets double clicked and then runs in wscript.exe. I appreciate any help. Lots of Greetings! Volker -- For email replies, please substitute the obvious. |
My System Specs![]() |
| | #2 (permalink) |
| | Re: Consuming a .NET event in VBScript You should ask in a .Net group about that part. You'll need to end up with a standard COM dispatch interface for VBS to see it. From the VBS end, you want to "consume events" from your "component solution"? (Why do they talk so silly in .Net? ![]() You have the right setup for creating the object, but you also need to have an event sub and you also need to keep the script alive until the event happens. So either you're missing two critical things or you haven't posted all of the code. Quote: > I'm pretty new to .NET and I am trying to have a VBScript consume an event Quote: > I started out with http://msdn.microsoft.com/en-us/library/dd8bf0x3.aspx. > I registered the assembly for COM interop and made it COM visible Quote: > > This is the .NET Code: > using System.Runtime.InteropServices; > namespace PureEvents > { > public delegate void ClickDelegate(int x, int y); > public delegate void ResizeDelegate(); > > // Step 1: Defines an event sink interface (ButtonEvents) to be > // implemented by the COM sink. > [GuidAttribute("1A585C4D-3371-48dc-AF8A-AFFECC1B0967")] > [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)] > public interface ButtonEvents > { > void Click(int x, int y); > void Resize(); > } > // Step 2: Connects the event sink interface to a class > // by passing the namespace and event sink interface > // ("EventSource.ButtonEvents, EventSrc"). > [ComSourceInterfaces(typeof(ButtonEvents))] > public class PureEvents > { > public event ClickDelegate Click; > public event ResizeDelegate Resize; > public string getValue() > { > return "Normal method call"; > } > public PureEvents() > { > } > public void CauseClickEvent(int x, int y) > { > Click(x, y); > } > public void CauseResizeEvent() > { > Resize(); > } > } > } > > The VBScript code looks like this: > sub X_Resize > msgBox "Here" > end sub > set BFI=wscript.createobject("PureEvents.PureEvents","X_") > msgBox BFI.GetValue() > BFI.CauseResizeEvent > msgBox "There" > > The getValue()-Method gets called properly, so the component itself works. > However, when I call CauseResizeEvent, I get an 80004001 error (method or Quote: > > Am I missing anything obvious here? > The script does not run in IIS or internet explorer, it just gets double Quote: > > I appreciate any help. > > Lots of Greetings! > Volker > > -- > For email replies, please substitute the obvious. |
My System Specs![]() |
| | #3 (permalink) |
| | Re: Consuming a .NET event in VBScript mayayana schrieb: Quote: > You should ask in a .Net group about that > part. Quote: > You'll need to end up with a standard > COM dispatch interface for VBS to see it. applying the settings in the project properties. I have now set the ClassInterface set to AutoDispatch for the whole assembly but there's no difference. Quote: > > From the VBS end, you want to "consume > events" from your "component solution"? ..NET creates the event and VBScript is supposed to process them. Quote: > You have the right setup for creating the object, > but you also need to have an event sub and > you also need to keep the script alive until > the event happens. So either you're missing > two critical things or you haven't posted > all of the code. How do I define an event sub? I thought, defining a sub like X_Resize does it. Is there anything more to do? Should the sub accept a certain set of parameters? How do I keep a script alive? The error happens before the messagebox "There" appears. Adding a wscript.sleep(15) right after the CauseResizeEvent doesn't make a difference. It's probably some stupid beginners mistake, but somehow I'm not getting it right. Lots of Greetings! Volker Quote: > > Quote: >> I'm pretty new to .NET and I am trying to have a VBScript consume an event Quote: >> I started out with http://msdn.microsoft.com/en-us/library/dd8bf0x3.aspx. >> I registered the assembly for COM interop and made it COM visible Quote: >> This is the .NET Code: >> using System.Runtime.InteropServices; >> namespace PureEvents >> { >> public delegate void ClickDelegate(int x, int y); >> public delegate void ResizeDelegate(); >> >> // Step 1: Defines an event sink interface (ButtonEvents) to be >> // implemented by the COM sink. >> [GuidAttribute("1A585C4D-3371-48dc-AF8A-AFFECC1B0967")] >> [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)] >> public interface ButtonEvents >> { >> void Click(int x, int y); >> void Resize(); >> } >> // Step 2: Connects the event sink interface to a class >> // by passing the namespace and event sink interface >> // ("EventSource.ButtonEvents, EventSrc"). >> [ComSourceInterfaces(typeof(ButtonEvents))] >> public class PureEvents >> { >> public event ClickDelegate Click; >> public event ResizeDelegate Resize; >> public string getValue() >> { >> return "Normal method call"; >> } >> public PureEvents() >> { >> } >> public void CauseClickEvent(int x, int y) >> { >> Click(x, y); >> } >> public void CauseResizeEvent() >> { >> Resize(); >> } >> } >> } >> >> The VBScript code looks like this: >> sub X_Resize >> msgBox "Here" >> end sub >> set BFI=wscript.createobject("PureEvents.PureEvents","X_") >> msgBox BFI.GetValue() >> BFI.CauseResizeEvent >> msgBox "There" >> >> The getValue()-Method gets called properly, so the component itself works. >> However, when I call CauseResizeEvent, I get an 80004001 error (method or Quote: >> Am I missing anything obvious here? >> The script does not run in IIS or internet explorer, it just gets double Quote: >> I appreciate any help. >> >> Lots of Greetings! >> Volker >> >> -- >> For email replies, please substitute the obvious. > -- For email replies, please substitute the obvious. |
My System Specs![]() |
| | #4 (permalink) |
| | Re: Consuming a .NET event in VBScript Volker Hetzer schrieb: Found the problem. The ButtonEvent-Interface needed DispIds. They were not in the example given by microsoft either. Lots of Greetings! Volker Quote: > mayayana schrieb: Quote: >> You should ask in a .Net group about that >> part. > Quote: >> You'll need to end up with a standard >> COM dispatch interface for VBS to see it. > applying the settings in the project properties. > I have now set the ClassInterface set to AutoDispatch > for the whole assembly but there's no difference. > > Quote: >> >> From the VBS end, you want to "consume >> events" from your "component solution"? > .NET creates the event and VBScript is > supposed to process them. > Quote: >> You have the right setup for creating the object, >> but you also need to have an event sub and >> you also need to keep the script alive until >> the event happens. So either you're missing >> two critical things or you haven't posted >> all of the code. > How do I define an event sub? > I thought, defining a sub like X_Resize does it. > Is there anything more to do? > Should the sub accept a certain set of parameters? > > How do I keep a script alive? > The error happens before the messagebox "There" appears. > Adding a wscript.sleep(15) right after the CauseResizeEvent > doesn't make a difference. > > It's probably some stupid beginners mistake, but > somehow I'm not getting it right. > > Lots of Greetings! > Volker > > > Quote: >> >> Quote: >>> I'm pretty new to .NET and I am trying to have a VBScript consume an >>> event Quote: >>> I started out with >>> http://msdn.microsoft.com/en-us/library/dd8bf0x3.aspx. >>> I registered the assembly for COM interop and made it COM visible Quote: >>> This is the .NET Code: >>> using System.Runtime.InteropServices; >>> namespace PureEvents >>> { >>> public delegate void ClickDelegate(int x, int y); >>> public delegate void ResizeDelegate(); >>> >>> // Step 1: Defines an event sink interface (ButtonEvents) to be >>> // implemented by the COM sink. >>> [GuidAttribute("1A585C4D-3371-48dc-AF8A-AFFECC1B0967")] >>> [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)] >>> public interface ButtonEvents >>> { >>> void Click(int x, int y); >>> void Resize(); >>> } >>> // Step 2: Connects the event sink interface to a class >>> // by passing the namespace and event sink interface >>> // ("EventSource.ButtonEvents, EventSrc"). >>> [ComSourceInterfaces(typeof(ButtonEvents))] >>> public class PureEvents >>> { >>> public event ClickDelegate Click; >>> public event ResizeDelegate Resize; >>> public string getValue() >>> { >>> return "Normal method call"; >>> } >>> public PureEvents() >>> { >>> } >>> public void CauseClickEvent(int x, int y) >>> { >>> Click(x, y); >>> } >>> public void CauseResizeEvent() >>> { >>> Resize(); >>> } >>> } >>> } >>> >>> The VBScript code looks like this: >>> sub X_Resize >>> msgBox "Here" >>> end sub >>> set BFI=wscript.createobject("PureEvents.PureEvents","X_") >>> msgBox BFI.GetValue() >>> BFI.CauseResizeEvent >>> msgBox "There" >>> >>> The getValue()-Method gets called properly, so the component itself >>> works. >>> However, when I call CauseResizeEvent, I get an 80004001 error >>> (method or Quote: >>> Am I missing anything obvious here? >>> The script does not run in IIS or internet explorer, it just gets double Quote: >>> I appreciate any help. >>> >>> Lots of Greetings! >>> Volker >>> >>> -- >>> For email replies, please substitute the obvious. >> > -- For email replies, please substitute the obvious. |
My System Specs![]() |
![]() |
| Thread Tools | |
| |
Similar Threads | ||||
| Thread | Forum | |||
| CSRSS.exe consuming CPU bandwidth | Vista General | |||
| Sleep and its power consuming | Vista General | |||
| Audiodg.exe consuming up to 40% CPU usage | Vista General | |||
| Re: SP 1 Time Consuming | Vista General | |||
| Re: SP 1 Time Consuming | Vista General | |||