Returning a character buffer from a DLL
Hi All,
I wrote a simple MFC application and a simple MFC DLL.
I need to return a string buffer from the DLL in a RunQuery function.
Please see the code below (Note that I cleared some unrelated lines
like catch, etc, which are not related to my problem now to make code
clearer.)
If I check the "TheValue.operator _bstr_t().operator char *()" value
in the DLL ,it gives me the correct value!
But if I check the returned value in the APP, I get junk...
What is wrong here?
What I did was as follows (after many trials, and the code shown here
is not necessarily what I think is the correct one...):
-------------------------
In the App:
-------------------------
char* CSAPI2VPGDlg::GetExtEventID( CString sInternalEventID )
{
RunQuery(hRC, m_sExtEventID, sInternalEventID); //m_sExtEventID is a
32 bytes char array member
return m_sExtEventID;
}
-------------------------
In the DLL:
-------------------------
char* CXDBApp::RunQuery(const CString& a_sQuery)
{
//Find field
CString s = a_sQuery;
CString sField = GetFieldForCollect(s);
_variant_t TheValue;
m_pRecordset.CreateInstance(__uuidof(Recordset));
try
{
m_pRecordset->Open((LPCSTR)a_sQuery,
m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
while(!m_pRecordset->adoEOF)
{
TheValue = m_pRecordset->GetCollect((char*)_bstr_t(sField));
if(TheValue.vt!=VT_NULL){
m_pRecordset->Close();
//return((char*)_bstr_t(TheValue));
return TheValue.operator _bstr_t().operator char *();
}
}
m_pRecordset->Close();
}
}