Windows Vista Forums
Vista Forums Home Join Vista Forums Windows 7 Forum Vista Tutorials Tags
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.

Go Back   Vista Forums > Misc Newsgroups > VB Script

Vista - Consuming a .NET event in VBScript

Reply
 
Old 06-03-2009   #1 (permalink)
Volker Hetzer


 
 

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 SpecsSystem Spec
Old 06-03-2009   #2 (permalink)
mayayana


 
 

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
created in a .NET component.
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
(checkboxes in the Visual Studio 2--8 project properties dialog).
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
process not implemented".
Quote:

>
> 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.
Quote:

>
> I appreciate any help.
>
> Lots of Greetings!
> Volker
>
> --
> For email replies, please substitute the obvious.

My System SpecsSystem Spec
Old 06-04-2009   #3 (permalink)
Volker Hetzer


 
 

Re: Consuming a .NET event in VBScript

mayayana schrieb:
Quote:

> You should ask in a .Net group about that
> part.
Added crosspost.
Quote:

> You'll need to end up with a standard
> COM dispatch interface for VBS to see it.
I thought that VStudio does it correctly when
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"?
Exactly.
..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.
This is all of the code there is.
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
> created in a .NET component.
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
> (checkboxes in the Visual Studio 2--8 project properties dialog).
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
> process not implemented".
Quote:

>> 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.
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 SpecsSystem Spec
Old 06-04-2009   #4 (permalink)
Volker Hetzer


 
 

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.
> Added crosspost.
>
Quote:

>> You'll need to end up with a standard
>> COM dispatch interface for VBS to see it.
> I thought that VStudio does it correctly when
> 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"?
> Exactly.
> .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.
> This is all of the code there is.
> 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
>> created in a .NET component.
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
>> (checkboxes in the Visual Studio 2--8 project properties dialog).
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
>> process not implemented".
Quote:

>>> 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.
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 SpecsSystem Spec
Reply

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


Vista Forums is an independent web site and has not been authorized,
sponsored, or otherwise approved by Microsoft Corporation.
"Windows Vista", the Start Orb, and related materials are trademarks of Microsoft Corp.
© Designer Media Ltd

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46