What happened to the Messenger Plus! forums on msghelp.net?
Shoutbox » MsgHelp Archive » Messenger Plus! for Live Messenger » Scripting » [Resolved] Interop.Call SendMessageW not working since Plus 5/WLM 2011

[Resolved] Interop.Call SendMessageW not working since Plus 5/WLM 2011
Author: Message:
Matti
Elite Member
*****

Avatar
Script Developer and Helper

Posts: 1646
Reputation: 39
31 / Male / Flag
Joined: Apr 2004
RE: [Resolved] Interop.Call SendMessageW not working since Plus 5/WLM 2011
Note that there actually is no such thing as type casting in JScript. It may look and work like type casting, but actually you're calling a function which happens to behave like a cast. :P

The following code:
Javascript code:
var bool = (Boolean)(5);

is identical to:
Javascript code:
var bool = Boolean(5);

The Boolean() function acts like a cast, in the sense that it takes any variable and produces a boolean. When working with inheritance, the difference is much more clear.
Javascript code:
var A = function(){};
var B = function(){};
B.prototype = new A;
 
var b = new B;
Debug.Trace(b instanceof A); // -> true
Debug.Trace(b instanceof B); // -> true
var a = (A)(b);
Debug.Trace(a instanceof A); // -> false?!?!
Debug.Trace(a instanceof B); // -> false?!?!

When B inherits from A, one could try to cast an object b of class B to class A using something like (A)(b). However, this simply calls the function (constructor) A with the (unused) parameter b and thus this call returns void. Because JScript uses prototypical inheritance, such casting is simply not possible. Even with primitive types such as Number or Boolean, you'll always end up with a copy of the original. You probably won't even notice this since those primitive types don't compare by reference, but it happens. :P



Another suggestion: don't use "new Boolean(o)" when converting to a boolean, either use "Boolean(o)" or "!!o". Here's why:
Javascript code:
var a = Boolean( "true" );
Debug.Trace(a); // -> true
Debug.Trace(typeof a); // -> boolean
 
var b = !!"true";
Debug.Trace(b); // -> true
Debug.Trace(typeof b); // -> boolean
 
var c = new Boolean( "true" );
Debug.Trace(c); // -> true
Debug.Trace(typeof c); // -> object?!?!

The explanation for this is that when using "new", you're always creating an object. The same happens with the "this" object, it's always an object - even when you're working on a primitive class!
Javascript code:
Number.prototype.isFive = function() {
   Debug.Trace(typeof this); // -> object?!?!
   return this === 5;
}
Debug.Trace( (5).isFive() ); // -> false?!?!



So yes, either compare the string to '0000' or use a conversion such as:
Javascript code:
bTabsEnabled = (Boolean)((Number)(reg.toArray().join('')));

or simply:
Javascript code:
bTabsEnabled = !!(1*(reg.toArray().join('')));

At least it'll have the proper type. :P
Plus! Script Developer | Plus! Beta Tester | Creator of Countdown Live | Co-developer of Screenshot Sender 5

Found my post useful? Rate me!
03-25-2011 07:24 PM
Profile E-Mail PM Web Find Quote Report
« Next Oldest Return to Top Next Newest »

Messages In This Thread
[Resolved] Interop.Call SendMessageW not working since Plus 5/WLM 2011 - by Domsy on 03-24-2011 at 03:33 PM
RE: Interop.Call SendMessageW not working since Plus 5/WLM 2011 - by matty on 03-24-2011 at 04:52 PM
RE: RE: Interop.Call SendMessageW not working since Plus 5/WLM 2011 - by Domsy on 03-24-2011 at 05:02 PM
RE: Interop.Call SendMessageW not working since Plus 5/WLM 2011 - by matty on 03-24-2011 at 05:06 PM
RE: RE: Interop.Call SendMessageW not working since Plus 5/WLM 2011 - by Domsy on 03-24-2011 at 07:28 PM
RE: Interop.Call SendMessageW not working since Plus 5/WLM 2011 - by matty on 03-24-2011 at 08:33 PM
RE: Interop.Call SendMessageW not working since Plus 5/WLM 2011 - by Domsy on 03-24-2011 at 09:56 PM
RE: [Resolved] Interop.Call SendMessageW not working since Plus 5/WLM 2011 - by matty on 03-24-2011 at 10:31 PM
RE: Interop.Call SendMessageW not working since Plus 5/WLM 2011 - by Matti on 03-24-2011 at 10:37 PM
RE: [Resolved] Interop.Call SendMessageW not working since Plus 5/WLM 2011 - by Domsy on 03-24-2011 at 10:53 PM
RE: [Resolved] Interop.Call SendMessageW not working since Plus 5/WLM 2011 - by CookieRevised on 03-24-2011 at 10:56 PM
RE: [Resolved] Interop.Call SendMessageW not working since Plus 5/WLM 2011 - by Matti on 03-24-2011 at 11:08 PM
RE: [Resolved] Interop.Call SendMessageW not working since Plus 5/WLM 2011 - by Domsy on 03-24-2011 at 11:10 PM
RE: [Resolved] Interop.Call SendMessageW not working since Plus 5/WLM 2011 - by matty on 03-24-2011 at 11:17 PM
RE: RE: [Resolved] Interop.Call SendMessageW not working since Plus 5/WLM 2011 - by Domsy on 03-24-2011 at 11:27 PM
RE: [Resolved] Interop.Call SendMessageW not working since Plus 5/WLM 2011 - by CookieRevised on 03-24-2011 at 11:26 PM
RE: [Resolved] Interop.Call SendMessageW not working since Plus 5/WLM 2011 - by CookieRevised on 03-24-2011 at 11:33 PM
RE: RE: [Resolved] Interop.Call SendMessageW not working since Plus 5/WLM 2011 - by Domsy on 03-24-2011 at 11:38 PM
RE: [Resolved] Interop.Call SendMessageW not working since Plus 5/WLM 2011 - by CookieRevised on 03-24-2011 at 11:41 PM
RE: [Resolved] Interop.Call SendMessageW not working since Plus 5/WLM 2011 - by Domsy on 03-24-2011 at 11:46 PM
RE: [Resolved] Interop.Call SendMessageW not working since Plus 5/WLM 2011 - by matty on 03-25-2011 at 01:50 PM
RE: [Resolved] Interop.Call SendMessageW not working since Plus 5/WLM 2011 - by CookieRevised on 03-25-2011 at 03:50 PM
RE: [Resolved] Interop.Call SendMessageW not working since Plus 5/WLM 2011 - by Matti on 03-25-2011 at 07:24 PM


Threaded Mode | Linear Mode
View a Printable Version
Send this Thread to a Friend
Subscribe | Add to Favorites
Rate This Thread:

Forum Jump:

Forum Rules:
You cannot post new threads
You cannot post replies
You cannot post attachments
You can edit your posts
HTML is Off
myCode is On
Smilies are On
[img] Code is On