PDA

Ver la Versión Completa : Enviar BSTR como parámetro de funcion


mordaz
12-08-2014, 11:24:36
Buenos dias,

Estoy utilizando un Control Active X en C++ Builder 6 y estoy tratando de usar una función que recibe como parámetro un puntero BSTR*, pero al ejecutar la función me marca error de memoria.

En concreto la función que deseo utilizar es la siguiente:


TOLEBOOL __fastcall GetUserTmpExStr(long dwMachineNumber/*[in]*/,
BSTR dwEnrollNumber/*[in]*/, long dwFingerIndex/*[in]*/,
long* Flag/*[out]*/, BSTR* TmpData/*[out]*/,
long* TmpLength/*[out]*/);


Y la estoy empleando de esta manera:


void __fastcall TForm1::CZKEM1EnrollFingerEx(TObject *Sender,
BSTR EnrollNumber, long FingerIndex, long ActionResult,
long TemplateLength)
{
if (ActionResult==0)
{
long TLength;
long flag;
BSTR Tempdata;

if (CZKEM1->GetUserTmpExStr(CZKEM1->MachineNumber,EnrollNumber,FingerIndex,&flag,&Tempdata,&TLength))
{
}
}
}


Todos los parametros de entrada los recibe de la propia función y están bien inicializados, el problema es con los 3 ultimos parámetros de salida.

Agradezco su ayuda.

ecfisa
12-08-2014, 19:58:09
Hola mordaz.

Sería bueno poder saber el error que estas recibiendo, pero de todos modos y por si te sirve de guía, te agrego un ejemplo muy básico que usa parámetros BSTR y LONG:

void demo(BSTR in, BSTR*out, LONG* flag){
*flag = 123;
wsprintf(String(*out).c_str(), "%s %s %d", String(in).c_str(),
"modificado", *flag);
}


void __fastcall TForm1::Button1Click(TObject *Sender)
{
BSTR BSTRIn = L"Mensaje de prueba";
BSTR BSTROut = NULL;
LONG LONGOut = 0;

demo(BSTRIn, &BSTROut, &LONGOut);
MessageBox(0, String(BSTROut).c_str(), "", MB_OK);
}

A fin de simplificar la presentación, ambos parámetros regresan como un único resultado en el segundo parámetro.

Saludos :)

mordaz
16-08-2014, 01:40:02
Como siempre muchas gracias Ecfisa, al parecer todo el problema fue por la "inicialización" de la variable :(

Se arreglo modificando esta linea.


BSTR Tempdata=NULL;


Gracias por todo.