For Programmers: Free Programming Magazines  


Home > Archive > ASP .NET > July 2007 > HRESULT return value in Javascript without exception









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author HRESULT return value in Javascript without exception
Rob

2007-07-30, 7:11 pm

Hi,
If I call my own DLL from Javascript, a HRESULT is returned.
Javascript cannot cast this to an integer.
Is there any other way of typecasting this returnvalue to integer, wihout
using the exception method which is described everywhere ?
Please note that I am unfamiliar with javascript, I am used to C/C++.

My Javascript call looks like :

var result;
result = Testfunc1();

The function is called OK, but the returnvalue cannot be converted.
It is printed as "undefined".
I just need 0 or 1 to be returned (or 2 other values, one for OK, and one
for ERROR)
So I tried the following :

result = (Testfunc1() & 255) ;

But this always returns 0 for some reason....

It seems unlogical and not neat, to throw exceptions when really nothing
serious happenned, just to convert the returnvalue. Also the clientcode will
be poluted with a lot of extra (rather poorly structured) lines.
So If I could just get the low-byte of the HRESULT, this would be enough for
me.

Please Help !

Greetings,
Rob.





















Eliyahu Goldin

2007-07-30, 7:11 pm

How does javascript know your function?

Do you mean you call it on an object reference like

myObj = ActiveXObject ("Prog ID of COM DLL");
result = myObj.Testfunc1();


--
Eliyahu Goldin,
Software Developer
Microsoft MVP [ASP.NET]
http://msmvps.com/blogs/egoldin
http://usableasp.net


"Rob" <Rob@discussions.microsoft.com> wrote in message
news:3666A6E5-0505-45F4-80D1-9D9B3CBF9B6B@microsoft.com...
> Hi,
> If I call my own DLL from Javascript, a HRESULT is returned.
> Javascript cannot cast this to an integer.
> Is there any other way of typecasting this returnvalue to integer, wihout
> using the exception method which is described everywhere ?
> Please note that I am unfamiliar with javascript, I am used to C/C++.
>
> My Javascript call looks like :
>
> var result;
> result = Testfunc1();
>
> The function is called OK, but the returnvalue cannot be converted.
> It is printed as "undefined".
> I just need 0 or 1 to be returned (or 2 other values, one for OK, and one
> for ERROR)
> So I tried the following :
>
> result = (Testfunc1() & 255) ;
>
> But this always returns 0 for some reason....
>
> It seems unlogical and not neat, to throw exceptions when really nothing
> serious happenned, just to convert the returnvalue. Also the clientcode
> will
> be poluted with a lot of extra (rather poorly structured) lines.
> So If I could just get the low-byte of the HRESULT, this would be enough
> for
> me.
>
> Please Help !
>
> Greetings,
> Rob.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>



Rob

2007-07-30, 7:11 pm

Yes.....
As I mentioned, the function is called OK, So I left this part out.

Greetings,
Rob

"Eliyahu Goldin" wrote:

> How does javascript know your function?
>
> Do you mean you call it on an object reference like
>
> myObj = ActiveXObject ("Prog ID of COM DLL");
> result = myObj.Testfunc1();
>
>
> --
> Eliyahu Goldin,
> Software Developer
> Microsoft MVP [ASP.NET]
> http://msmvps.com/blogs/egoldin
> http://usableasp.net
>
>
> "Rob" <Rob@discussions.microsoft.com> wrote in message
> news:3666A6E5-0505-45F4-80D1-9D9B3CBF9B6B@microsoft.com...
>
>
>

bruce barker

2007-07-30, 7:11 pm

HResult is meant to return errors, and is not the return value of a
interface. change the com interface to return an int value, then
javascript can access it.

-- bruce (sqlwork.com)

Rob wrote:
> Hi,
> If I call my own DLL from Javascript, a HRESULT is returned.
> Javascript cannot cast this to an integer.
> Is there any other way of typecasting this returnvalue to integer, wihout
> using the exception method which is described everywhere ?
> Please note that I am unfamiliar with javascript, I am used to C/C++.
>
> My Javascript call looks like :
>
> var result;
> result = Testfunc1();
>
> The function is called OK, but the returnvalue cannot be converted.
> It is printed as "undefined".
> I just need 0 or 1 to be returned (or 2 other values, one for OK, and one
> for ERROR)
> So I tried the following :
>
> result = (Testfunc1() & 255) ;
>
> But this always returns 0 for some reason....
>
> It seems unlogical and not neat, to throw exceptions when really nothing
> serious happenned, just to convert the returnvalue. Also the clientcode will
> be poluted with a lot of extra (rather poorly structured) lines.
> So If I could just get the low-byte of the HRESULT, this would be enough for
> me.
>
> Please Help !
>
> Greetings,
> Rob.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

Rob

2007-07-30, 7:11 pm

Tried that, but the project (ATL activex) doesn't compile such a member.
It says that all interface members must return HRESULT.

Error, returnvalue, whatever.... ( is S_OK an error? )
What matters to me is that Javascript seems unable to typecast the 4 byte
piece of memory (HRESULT==LONG in C++) that is returned to something usefull.

Greetings,
Rob.


"bruce barker" wrote:

> HResult is meant to return errors, and is not the return value of a
> interface. change the com interface to return an int value, then
> javascript can access it.
>
> -- bruce (sqlwork.com)
>
> Rob wrote:
>

Eliyahu Goldin

2007-07-30, 7:11 pm

Try describing your interface method in IDL like this:

HRESULT Testfunc1([out, retval] long *pResult);

and in C++ :

STDMETHODIMP Cwork::Testfunc1(long *pResult)
{
*pResult = 111;
return S_OK;
}


--
Eliyahu Goldin,
Software Developer & Consultant
Microsoft MVP [ASP.NET]
http://msmvps.com/blogs/egoldin


"Rob" <Rob@discussions.microsoft.com> wrote in message
news:5FF4D402-603F-46B3-8025-1D9A48D069B3@microsoft.com...
> Tried that, but the project (ATL activex) doesn't compile such a member.
> It says that all interface members must return HRESULT.
>
> Error, returnvalue, whatever.... ( is S_OK an error? )
> What matters to me is that Javascript seems unable to typecast the 4 byte
> piece of memory (HRESULT==LONG in C++) that is returned to something

usefull.[color=darkred]
>
> Greetings,
> Rob.
>
>
> "bruce barker" wrote:
>
wihout[color=darkred]
one[color=darkred]
nothing[color=darkred]
clientcode will[color=darkred]
enough for[color=darkred]


Rob

2007-07-31, 4:23 am

Hi,
Thanks for the response.
I tried that too, but I cannot seem to pass a pointer from javascript.

From what I read on Inet, Javascript can pass "references" if you pass a
non-basic type to a function (like an object). So If I have "int a" , I
should pass "a.value", which should be passed as a "reference" (whatever that
is in Javascript).
For an int * my c++ function does not receive a correct pointer.
So if anyone knows how to do this, please let me know.

Greetings,
Rob.









"Eliyahu Goldin" wrote:

> Try describing your interface method in IDL like this:
>
> HRESULT Testfunc1([out, retval] long *pResult);
>
> and in C++ :
>
> STDMETHODIMP Cwork::Testfunc1(long *pResult)
> {
> *pResult = 111;
> return S_OK;
> }
>
>
> --
> Eliyahu Goldin,
> Software Developer & Consultant
> Microsoft MVP [ASP.NET]
> http://msmvps.com/blogs/egoldin
>
>
> "Rob" <Rob@discussions.microsoft.com> wrote in message
> news:5FF4D402-603F-46B3-8025-1D9A48D069B3@microsoft.com...
> usefull.
> wihout
> one
> nothing
> clientcode will
> enough for
>
>
>

Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2010 codecomments.com