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 - 30 Jul 2007 15:20 GMT
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();

Signature
Eliyahu Goldin,
Software Developer
Microsoft MVP [ASP.NET]
http://msmvps.com/blogs/egoldin
http://usableasp.net
> Hi,
> If I call my own DLL from Javascript, a HRESULT is returned.
[quoted text clipped - 30 lines]
> Greetings,
> Rob.
Rob - 30 Jul 2007 15:54 GMT
Yes.....
As I mentioned, the function is called OK, So I left this part out.
Greetings,
Rob
> How does javascript know your function?
>
[quoted text clipped - 37 lines]
> > Greetings,
> > Rob.
bruce barker - 30 Jul 2007 16:43 GMT
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)
> Hi,
> If I call my own DLL from Javascript, a HRESULT is returned.
[quoted text clipped - 28 lines]
> Greetings,
> Rob.
Rob - 30 Jul 2007 17:10 GMT
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.
> 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
[quoted text clipped - 34 lines]
> > Greetings,
> > Rob.
Eliyahu Goldin - 30 Jul 2007 23:12 GMT
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;
}

Signature
Eliyahu Goldin,
Software Developer & Consultant
Microsoft MVP [ASP.NET]
http://msmvps.com/blogs/egoldin
> Tried that, but the project (ATL activex) doesn't compile such a member.
> It says that all interface members must return HRESULT.
[quoted text clipped - 44 lines]
> > > Greetings,
> > > Rob.
Rob - 31 Jul 2007 08:24 GMT
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.
> Try describing your interface method in IDL like this:
>
[quoted text clipped - 62 lines]
> > > > Greetings,
> > > > Rob.