Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Enviar BSTR como parámetro de funcion (https://www.clubdelphi.com/foros/showthread.php?t=86456)

mordaz 12-08-2014 11:24:36

Enviar BSTR como parámetro de funcion
 
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:

Código Delphi [-]
  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:

Código Delphi [-]
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:
Código:

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.

Código Delphi [-]
BSTR Tempdata=NULL;

Gracias por todo.


La franja horaria es GMT +2. Ahora son las 10:21:37.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi