HRESULT return value in Javascript without exception

G

Guest

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.
 
G

Guest

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

Greetings,
Rob

Eliyahu Goldin said:
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 said:
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.
 
B

bruce barker

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)
 
G

Guest

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.
 
E

Eliyahu Goldin

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;
}
 
G

Guest

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

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,015
Latest member
AmbrosePal

Latest Threads

Top