Help please: Trouble getting a value back from COM.

Darrin Smith <[email protected]>
Newsgroups gmane.comp.windows.devel.jawin
Message-ID <LISTSERV%[email protected]>
How do you need to set up the COM side to be able to get a value back to
your Jawin application without using simple getXXX methods? In other words,
I'd like to have a method that returns a value based on a parameter I send.

For example, I have a DLL that had a method that looks like this:

STDMETHODIMP CValidateLogin::Garbage(BSTR InputString, int InputInt, BSTR
returnString)
{
 returnString = CString(_T("blah")).AllocSysString();
 return 0;
}

I can call this just fine, but of course I can't get the value back out
(call by value on the returnString), so I modified the Garbage method to
take an array. It ended up looking like this:

STDMETHODIMP CValidateLogin::Garbage(BSTR InputString, int InputInt,BSTR
returnString[1])
{
 returnString[0] = CString(_T("blah")).AllocSysString();
 return 0;
}

This compiled just fine after changing the IDL and header file, but when I
ran it through the Jawin Type Browser, it would hang (out of memory I
think...even after I upped it to 256meg).

Next, I and a coworker (COM guy) tried to use a VARIANT like this:

STDMETHODIMP CValidateLogin::Garbage(BSTR InputString, int
InputInt,VARIANT* returnString)
{
 returnString->bstrVal = CString(_T("blah")).AllocSysString();
 return 0;
}

When that is run through the Jawin Type Browser, it ends up with this:

public void Garbage(String InputString,int InputInt,Variant[] returnString)
throws COMException
{
   invokeN("Garbage", new Object[] {InputString, new Integer(InputInt),
returnString});
}

This is just fine, but when I run this:

Variant[] v = new Variant[5];

      iLogin.Garbage("InputString", 5, v);

it gives me this error:

An unexpected exception has been detected in native code outside the VM.
Unexpected Signal : EXCEPTION_ACCESS_VIOLATION (0xc0000005) occurred at
PC=0x7715CB4D
Function=SafeArrayAllocDescriptor+0xA0
Library=C:\WINDOWS\system32\OLEAUT32.dll
Current Java thread:
 at org.jawin.marshal.GenericStub.dispatchInvoke0(Native Method)
 at org.jawin.marshal.GenericStub.dispatchInvoke(GenericStub.java:84)
 at org.jawin.DispatchPtr.invokeN(DispatchPtr.java:473)
 at org.jawin.DispatchPtr.invokeN(DispatchPtr.java:433)
...


So, my question is, how are you supposed to get a value back from COM?

Can someone provide me with an example please? This should be simple to do
but I can't find any example of how to do it using Jawin.

THANKS!
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.