Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Returning a string (BSTR) from an COM Automation object back to javascript

12 views
Skip to first unread message

Marc Oden

unread,
Dec 23, 2009, 1:47:39 PM12/23/09
to
I am trying to develop a ATL project that I wish to use in client side
javascript running in an ASP.NET web site. I have not not been able to
figure out how to return a string from my automation object back to the
javascript that invoked it.

Here is the relevant parts of my code:

From HitVeinClient.idl

interface IHitVeinReader : IDispatch{
[id(1), helpstring("method InitializeReader")] HRESULT
InitializeReader(void);
[id(2), helpstring("method TerminateReader")] HRESULT
TerminateReader(void);
[id(3), helpstring("method Enroll")] HRESULT Enroll(void);
[id(4), helpstring("method Verify")] HRESULT Verify(void);
[id(5), helpstring("method Identify")] HRESULT Identify(void);
[propget, id(6), helpstring("property ReturnMessage")] HRESULT
ReturnMessage([out, retval] BSTR* pVal);
};


From HitVeinClient.h

MIDL_INTERFACE("7F90F0D1-0B0D-4FEC-8178-69D6F48C2CCD")
IHitVeinReader : public IDispatch
{
public:
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE
InitializeReader( void) = 0;

virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE
TerminateReader( void) = 0;

virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Enroll(
void) = 0;

virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Verify(
void) = 0;

virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Identify(
void) = 0;

virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE
get_ReturnMessage(
/* [retval][out] */ BSTR *pVal) = 0;

};

/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE
IHitVeinReader_InitializeReader_Proxy(
IHitVeinReader * This);


void __RPC_STUB IHitVeinReader_InitializeReader_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);


/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE
IHitVeinReader_TerminateReader_Proxy(
IHitVeinReader * This);


void __RPC_STUB IHitVeinReader_TerminateReader_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);


/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE
IHitVeinReader_Enroll_Proxy(
IHitVeinReader * This);


void __RPC_STUB IHitVeinReader_Enroll_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);


/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE
IHitVeinReader_Verify_Proxy(
IHitVeinReader * This);


void __RPC_STUB IHitVeinReader_Verify_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);


/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE
IHitVeinReader_Identify_Proxy(
IHitVeinReader * This);


void __RPC_STUB IHitVeinReader_Identify_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);


/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE
IHitVeinReader_get_ReturnMessage_Proxy(
IHitVeinReader * This,
/* [retval][out] */ BSTR *pVal);


void __RPC_STUB IHitVeinReader_get_ReturnMessage_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);

From CHitVienReader.cpp

STDMETHODIMP CHitVeinReader::get_ReturnMessage(BSTR* pVal)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

bData = NULL;

bData = SysAllocString(msg);

if (bData == NULL)
{
return S_FALSE;
}

pVal = &bData;

return S_OK;
}


Any help would be greatly appreciated.

Marc Oden

unread,
Dec 23, 2009, 2:40:53 PM12/23/09
to
My bad it should be *pVal = bData; not pVal = &bData; Thanks to Brian Muth
at the MSDN forum for pointing this out.

"Marc Oden" <mo...@avioninc.com> wrote in message
news:A4293D1D-CA91-422A-8D4B- 52D0EC...@microsoft.com...

0 new messages