Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Problema con BSTR

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Problema con BSTR Responder citando

Antes que nada, un saludo para todos hace tiempo que no pasaba por aquí.

Mi problema es el siguiente tengo unos objetos COM los cuales proviene de un SDK para generar unas pólizas, todo funcionaba de manera correcta y de un día para otro dejo de trabajar. Concretamente cual es el problema.
El objeto TSdkMovimientoPolizaPtr tiene una propiedad __property BSTR CodigoCuenta = {read = get_CodigoCuenta, write = set_CodigoCuenta}; en algunas ocasiones (no sé porque) cuando se asigna el código de la cuenta la propiedad SdkMovimientoPoliza1->CodigoCuenta = WideString(L”510200054I0020” ).c_bstr(); no toma el valor de la cuenta y se queda en NULL y al querer guardar el movimiento el SDK me regresa el error “La cuenta es obligatoria”.
Según mi escaso conocimiento podría ser algún problema con las declaraciones o la asignación de memoria, pero no logro encontrar la solución.
Agradezco de antemano la ayuda o sugerencia.
Dejo el código completó.

Objeto COM
Código:

// *********************************************************************//
// Interface: ITSdkMovimientoPoliza
// Flags:     (4416) Dual OleAutomation Dispatchable
// GUID:      {17E8C375-D8DC-4CC7-A4D3-B4558B39E388}
// *********************************************************************//
interface ITSdkMovimientoPoliza  : public IDispatch
{
public:
  // [1] Id: obtiene el identificador �nico del movimiento.
  virtual HRESULT STDMETHODCALLTYPE get_Id(long* pValRet/*[out,retval]*/) = 0;
  // [2] IdPoliza: obtiene el identificador �nico de la p�liza.
  virtual HRESULT STDMETHODCALLTYPE get_IdPoliza(long* pValRet/*[out,retval]*/) = 0;
  // [3] NumMovto: obtiene el n�mero consecutivo del movimiento en la p�liza.
  virtual HRESULT STDMETHODCALLTYPE get_NumMovto(long* pValRet/*[out,retval]*/) = 0;
  // [3] NumMovto: obtiene el n�mero consecutivo del movimiento en la p�liza.
  virtual HRESULT STDMETHODCALLTYPE set_NumMovto(long pValRet/*[in]*/) = 0;
  // [4] CodigoCuenta: obtiene el c�digo de la cuenta del movimiento de la p�liza.
  virtual HRESULT STDMETHODCALLTYPE get_CodigoCuenta(BSTR* pValRet/*[out,retval]*/) = 0;
  // [4] CodigoCuenta: obtiene el c�digo de la cuenta del movimiento de la p�liza.
  virtual HRESULT STDMETHODCALLTYPE set_CodigoCuenta(BSTR pValRet/*[in]*/) = 0;
  // [5] TipoMovto: obtiene el tipo de movimiento de la p�liza.
  virtual HRESULT STDMETHODCALLTYPE get_TipoMovto(Sdkcontpaqnglib_tlb::ETIPOIMPORTEMOVPOLIZA* pValRet/*[out,retval]*/) = 0;
  // [5] TipoMovto: obtiene el tipo de movimiento de la p�liza.
  virtual HRESULT STDMETHODCALLTYPE set_TipoMovto(Sdkcontpaqnglib_tlb::ETIPOIMPORTEMOVPOLIZA pValRet/*[in]*/) = 0;
  // [6] Importe: obtiene el importe en moneda base del movimiento.
  virtual HRESULT STDMETHODCALLTYPE get_Importe(CURRENCY* pValRet/*[out,retval]*/) = 0;
  // [6] Importe: obtiene el importe en moneda base del movimiento.
  virtual HRESULT STDMETHODCALLTYPE set_Importe(CURRENCY pValRet/*[in]*/) = 0;
  // [7] ImporteME: obtiene el importe en moneda extranjera del movimiento.
  virtual HRESULT STDMETHODCALLTYPE get_ImporteME(CURRENCY* pValRet/*[out,retval]*/) = 0;
  // [7] ImporteME: obtiene el importe en moneda extranjera del movimiento.
  virtual HRESULT STDMETHODCALLTYPE set_ImporteME(CURRENCY pValRet/*[in]*/) = 0;
  // [8] Referencia: obtiene la referencia del movimiento de la p�liza.
  virtual HRESULT STDMETHODCALLTYPE get_Referencia(BSTR* pValRet/*[out,retval]*/) = 0;
  // [8] Referencia: obtiene la referencia del movimiento de la p�liza.
  virtual HRESULT STDMETHODCALLTYPE set_Referencia(BSTR pValRet/*[in]*/) = 0;
  // [9] Concepto: obtiene el concepto del movimiento de la p�liza.
  virtual HRESULT STDMETHODCALLTYPE get_Concepto(BSTR* pValRet/*[out,retval]*/) = 0;
  // [9] Concepto: obtiene el concepto del movimiento de la p�liza.
  virtual HRESULT STDMETHODCALLTYPE set_Concepto(BSTR pValRet/*[in]*/) = 0;
  // [10] Diario: obtiene el n�mero del diario especial del movimiento de la p�liza.
  virtual HRESULT STDMETHODCALLTYPE get_Diario(long* pValRet/*[out,retval]*/) = 0;
  // [10] Diario: obtiene el n�mero del diario especial del movimiento de la p�liza.
  virtual HRESULT STDMETHODCALLTYPE set_Diario(long pValRet/*[in]*/) = 0;
  // [11] SegmentoNegocio: obtiene el n�mero del segmento de negocio del movimiento de la p�liza.
  virtual HRESULT STDMETHODCALLTYPE get_SegmentoNegocio(BSTR* pValRet/*[out,retval]*/) = 0;
  // [11] SegmentoNegocio: obtiene el n�mero del segmento de negocio del movimiento de la p�liza.
  virtual HRESULT STDMETHODCALLTYPE set_SegmentoNegocio(BSTR pValRet/*[in]*/) = 0;
  // [12] setId
  virtual HRESULT STDMETHODCALLTYPE set_setId(long Param1/*[in]*/) = 0;
  // [13] setIdPoliza
  virtual HRESULT STDMETHODCALLTYPE set_setIdPoliza(long Param1/*[in]*/) = 0;
  // [14] setNumMovto
  virtual HRESULT STDMETHODCALLTYPE set_setNumMovto(long Param1/*[in]*/) = 0;
  // [15] iniciarInfo: inicializa los datos del objeto del Sdk de movimientos de p�lizas
  virtual HRESULT STDMETHODCALLTYPE iniciarInfo(void) = 0;
  // [16] setCuenta: busca la informaci�n de la cuenta de un movimiento de p�liza.
  virtual HRESULT STDMETHODCALLTYPE set_setCuenta(long Param1/*[in]*/) = 0;
  // [17] getCuenta: copia la informaci�n de la cuenta en un nuevo objeto TSdkCuenta.
  virtual HRESULT STDMETHODCALLTYPE getCuenta(Sdkcontpaqnglib_tlb::ITSdkCuenta* aSdkCuenta/*[in]*/,
                                              long* pValRet/*[out,retval]*/) = 0;
  // [18] setDiario: busca la informaci�n del diario especial de un movimiento de p�liza.
  virtual HRESULT STDMETHODCALLTYPE set_setDiario(long Param1/*[in]*/) = 0;
  // [19] getDiario: copia la informaci�n del diario especial de un movimiento de p�liza
  virtual HRESULT STDMETHODCALLTYPE getDiario(Sdkcontpaqnglib_tlb::ITSdkDiarioEspecial* aSdkDiario/*[in]*/,
                                              long* pValRet/*[out,retval]*/) = 0;
  // [20] setSegNeg: busca la informaci�n del segmento de negocio de un movimiento de p�liza.
  virtual HRESULT STDMETHODCALLTYPE set_setSegNeg(long Param1/*[in]*/) = 0;
  // [21] getSegNeg: copia la informaci�n del segmento de negocio de un movimiento de p�liza.
  virtual HRESULT STDMETHODCALLTYPE getSegNeg(Sdkcontpaqnglib_tlb::ITSdkSegmentoNegocio* aSdkSegNeg/*[in]*/,
                                              long* pValRet/*[out,retval]*/) = 0;
  // [22] IdCuenta: obtiene el n�mero �nico de los datos de la cuenta del movimiento de p�liza.
  virtual HRESULT STDMETHODCALLTYPE get_IdCuenta(long* pValRet/*[out,retval]*/) = 0;
  // [23] IdDiario: obtiene el n�mero �nico de los datos del diario especial del movimiento de p�liza.
  virtual HRESULT STDMETHODCALLTYPE get_IdDiario(long* pValRet/*[out,retval]*/) = 0;
  // [24] IdSegNeg: obtiene el n�mero �nico de los datos del segmento de negocio del movimiento de p�liza.
  virtual HRESULT STDMETHODCALLTYPE get_IdSegNeg(long* pValRet/*[out,retval]*/) = 0;
  // [25] setSesion
  virtual HRESULT STDMETHODCALLTYPE setSesion(Sdkcontpaqnglib_tlb::ITSdkSesion* newVal) = 0;
  // [26] buscaPorCuentaRangoFechas
  virtual HRESULT STDMETHODCALLTYPE buscaPorCuentaRangoFechas_buscaPrimero(BSTR aCodigoCuenta,
                                                                           DATE aFechaInicial,
                                                                           DATE aFechaFinal,
                                                                           long* pValRet/*[out,retval]*/) = 0;
  // [27] buscaPorCuentaRangoFechas_buscaSiguiente
  virtual HRESULT STDMETHODCALLTYPE buscaPorCuentaRangoFechas_buscaSiguiente(long* pValRet/*[out,retval]*/) = 0;
  // [28] buscaPorCuentaRangoFechas_buscaAnterior
  virtual HRESULT STDMETHODCALLTYPE buscaPorCuentaRangoFechas_buscaAnterior(long* pValRet/*[out,retval]*/) = 0;
  // [29] buscaPorCuentaRangoFechas_buscaUltimo
  virtual HRESULT STDMETHODCALLTYPE buscaPorCuentaRangoFechas_buscaUltimo(long* pValRet/*[out,retval]*/) = 0;
  // [30] method setSdkCuenta
  virtual HRESULT STDMETHODCALLTYPE setSdkCuenta(Sdkcontpaqnglib_tlb::ITSdkCuenta* aSdkCuenta) = 0;
  // [31] property CodigoDiario
  virtual HRESULT STDMETHODCALLTYPE get_CodigoDiario(BSTR* pVal/*[out,retval]*/) = 0;
  // [31] property CodigoDiario
  virtual HRESULT STDMETHODCALLTYPE set_CodigoDiario(BSTR pVal/*[in]*/) = 0;
  // [32] method getCodigoError
  virtual HRESULT STDMETHODCALLTYPE getCodigoError(BSTR* pValRet/*[out,retval]*/) = 0;
  // [33] method getMensajeError
  virtual HRESULT STDMETHODCALLTYPE getMensajeError(BSTR* pValRet/*[out,retval]*/) = 0;
  // [34] Guid: obtiene el guid del movimiento de la p�liza.
  virtual HRESULT STDMETHODCALLTYPE get_Guid(BSTR* pValRet/*[out,retval]*/) = 0;
  // [34] Guid: obtiene el guid del movimiento de la p�liza.
  virtual HRESULT STDMETHODCALLTYPE set_Guid(BSTR pValRet/*[in]*/) = 0;

#if !defined(__TLB_NO_INTERFACE_WRAPPERS)

  long __fastcall get_Id(void)
  {
    long pValRet;
    OLECHECK(this->get_Id((long*)&pValRet));
    return pValRet;
  }

  long __fastcall get_IdPoliza(void)
  {
    long pValRet;
    OLECHECK(this->get_IdPoliza((long*)&pValRet));
    return pValRet;
  }

  long __fastcall get_NumMovto(void)
  {
    long pValRet;
    OLECHECK(this->get_NumMovto((long*)&pValRet));
    return pValRet;
  }

  BSTR __fastcall get_CodigoCuenta(void)
  {
    BSTR pValRet = 0;
    OLECHECK(this->get_CodigoCuenta((BSTR*)&pValRet));
    return pValRet;
  }

  Sdkcontpaqnglib_tlb::ETIPOIMPORTEMOVPOLIZA __fastcall get_TipoMovto(void)
  {
    Sdkcontpaqnglib_tlb::ETIPOIMPORTEMOVPOLIZA pValRet;
    OLECHECK(this->get_TipoMovto((Sdkcontpaqnglib_tlb::ETIPOIMPORTEMOVPOLIZA*)&pValRet));
    return pValRet;
  }

  CURRENCY __fastcall get_Importe(void)
  {
    CURRENCY pValRet;
    OLECHECK(this->get_Importe((CURRENCY*)&pValRet));
    return pValRet;
  }

  CURRENCY __fastcall get_ImporteME(void)
  {
    CURRENCY pValRet;
    OLECHECK(this->get_ImporteME((CURRENCY*)&pValRet));
    return pValRet;
  }

  BSTR __fastcall get_Referencia(void)
  {
    BSTR pValRet = 0;
    OLECHECK(this->get_Referencia((BSTR*)&pValRet));
    return pValRet;
  }

  BSTR __fastcall get_Concepto(void)
  {
    BSTR pValRet = 0;
    OLECHECK(this->get_Concepto((BSTR*)&pValRet));
    return pValRet;
  }

  long __fastcall get_Diario(void)
  {
    long pValRet;
    OLECHECK(this->get_Diario((long*)&pValRet));
    return pValRet;
  }

  BSTR __fastcall get_SegmentoNegocio(void)
  {
    BSTR pValRet = 0;
    OLECHECK(this->get_SegmentoNegocio((BSTR*)&pValRet));
    return pValRet;
  }

  long __fastcall getCuenta(Sdkcontpaqnglib_tlb::ITSdkCuenta* aSdkCuenta/*[in]*/)
  {
    long pValRet;
    OLECHECK(this->getCuenta(aSdkCuenta, (long*)&pValRet));
    return pValRet;
  }

  long __fastcall getDiario(Sdkcontpaqnglib_tlb::ITSdkDiarioEspecial* aSdkDiario/*[in]*/)
  {
    long pValRet;
    OLECHECK(this->getDiario(aSdkDiario, (long*)&pValRet));
    return pValRet;
  }

  long __fastcall getSegNeg(Sdkcontpaqnglib_tlb::ITSdkSegmentoNegocio* aSdkSegNeg/*[in]*/)
  {
    long pValRet;
    OLECHECK(this->getSegNeg(aSdkSegNeg, (long*)&pValRet));
    return pValRet;
  }

  long __fastcall get_IdCuenta(void)
  {
    long pValRet;
    OLECHECK(this->get_IdCuenta((long*)&pValRet));
    return pValRet;
  }

  long __fastcall get_IdDiario(void)
  {
    long pValRet;
    OLECHECK(this->get_IdDiario((long*)&pValRet));
    return pValRet;
  }

  long __fastcall get_IdSegNeg(void)
  {
    long pValRet;
    OLECHECK(this->get_IdSegNeg((long*)&pValRet));
    return pValRet;
  }

  long __fastcall buscaPorCuentaRangoFechas_buscaPrimero(BSTR aCodigoCuenta, DATE aFechaInicial,
                                                         DATE aFechaFinal)
  {
    long pValRet;
    OLECHECK(this->buscaPorCuentaRangoFechas_buscaPrimero(aCodigoCuenta, aFechaInicial, aFechaFinal, (long*)&pValRet));
    return pValRet;
  }

  long __fastcall buscaPorCuentaRangoFechas_buscaSiguiente(void)
  {
    long pValRet;
    OLECHECK(this->buscaPorCuentaRangoFechas_buscaSiguiente((long*)&pValRet));
    return pValRet;
  }

  long __fastcall buscaPorCuentaRangoFechas_buscaAnterior(void)
  {
    long pValRet;
    OLECHECK(this->buscaPorCuentaRangoFechas_buscaAnterior((long*)&pValRet));
    return pValRet;
  }

  long __fastcall buscaPorCuentaRangoFechas_buscaUltimo(void)
  {
    long pValRet;
    OLECHECK(this->buscaPorCuentaRangoFechas_buscaUltimo((long*)&pValRet));
    return pValRet;
  }

  BSTR __fastcall get_CodigoDiario(void)
  {
    BSTR pVal = 0;
    OLECHECK(this->get_CodigoDiario((BSTR*)&pVal));
    return pVal;
  }

  BSTR __fastcall getCodigoError(void)
  {
    BSTR pValRet = 0;
    OLECHECK(this->getCodigoError((BSTR*)&pValRet));
    return pValRet;
  }

  BSTR __fastcall getMensajeError(void)
  {
    BSTR pValRet = 0;
    OLECHECK(this->getMensajeError((BSTR*)&pValRet));
    return pValRet;
  }

  BSTR __fastcall get_Guid(void)
  {
    BSTR pValRet = 0;
    OLECHECK(this->get_Guid((BSTR*)&pValRet));
    return pValRet;
  }


  __property   long            Id = {read = get_Id};
  __property   long            IdPoliza = {read = get_IdPoliza};
  __property   long            NumMovto = {read = get_NumMovto, write = set_NumMovto};
  __property   BSTR            CodigoCuenta = {read = get_CodigoCuenta, write = set_CodigoCuenta};
  __property   Sdkcontpaqnglib_tlb::ETIPOIMPORTEMOVPOLIZA TipoMovto = {read = get_TipoMovto, write = set_TipoMovto};
  __property   CURRENCY        Importe = {read = get_Importe, write = set_Importe};
  __property   CURRENCY        ImporteME = {read = get_ImporteME, write = set_ImporteME};
  __property   BSTR            Referencia = {read = get_Referencia, write = set_Referencia};
  __property   BSTR            Concepto = {read = get_Concepto, write = set_Concepto};
  __property   long            Diario = {read = get_Diario, write = set_Diario};
  __property   BSTR            SegmentoNegocio = {read = get_SegmentoNegocio, write = set_SegmentoNegocio};
  __property   long            setId = {write = set_setId};
  __property   long            setIdPoliza = {write = set_setIdPoliza};
  __property   long            setNumMovto = {write = set_setNumMovto};
  __property   long            setCuenta = {write = set_setCuenta};
  __property   long            setDiario = {write = set_setDiario};
  __property   long            setSegNeg = {write = set_setSegNeg};
  __property   long            IdCuenta = {read = get_IdCuenta};
  __property   long            IdDiario = {read = get_IdDiario};
  __property   long            IdSegNeg = {read = get_IdSegNeg};
  __property   BSTR            CodigoDiario = {read = get_CodigoDiario, write = set_CodigoDiario};
  __property   BSTR            Guid = {read = get_Guid, write = set_Guid};

#endif //   __TLB_NO_INTERFACE_WRAPPERS

};



Mi Codigo
Código:

//---------------------------------------------------------------------------
void TForm1::crea_movimientos_poliza(TSdkPolizaPtr SdkPoliza1)
{
   TSdkMovimientoPolizaPtr SdkMovimientoPoliza1;

   //Nos posicionamos en la poliza y la ponemos en modo edicion
   SdkPoliza1->buscaPorId(SdkPoliza1->Id);
   SdkPoliza1->modifica();

   ADOQuery2->First();
   while (!ADOQuery2->Eof)
   {
      SdkMovimientoPoliza1.CreateInstance(CLSID_TSdkMovimientoPoliza);
      SdkMovimientoPoliza1->setSesion(SdkSesion1);
      SdkMovimientoPoliza1->iniciarInfo();
      SdkMovimientoPoliza1->NumMovto = ADOQuery2->FieldByName("nmov")->AsInteger;

      SdkMovimientoPoliza1->CodigoCuenta = WideString(ADOQuery2->FieldByName("cuenta")->AsString.Trim()).c_bstr();

      if( ADOQuery2->FieldByName("tipo")->AsBoolean )  //Cargo o Abono
      {
         SdkMovimientoPoliza1->TipoMovto = ETIPOIMPORTEMOVPOLIZA::MOVPOLIZA_CARGO;
         SdkMovimientoPoliza1->Importe = ADOQuery2->FieldByName("cargo")->AsVariant;
      }
      else
      {
         SdkMovimientoPoliza1->TipoMovto = ETIPOIMPORTEMOVPOLIZA::MOVPOLIZA_ABONO;
         SdkMovimientoPoliza1->Importe =   ADOQuery2->FieldByName("abono")->AsVariant;
      }
      SdkMovimientoPoliza1->ImporteME = Variant(0);
      SdkMovimientoPoliza1->Diario = 0;
      SdkMovimientoPoliza1->SegmentoNegocio = 0;
      SdkMovimientoPoliza1->Concepto = WideString(ADOQuery2->FieldByName("concepto")->AsString.Trim()).c_bstr();
      SdkMovimientoPoliza1->Referencia = WideString(ADOQuery2->FieldByName("referencia")->AsString.Trim()).c_bstr();
      SdkMovimientoPoliza1->Guid = WideString(ADOQuery2->FieldByName("guid")->AsString.Trim()).c_bstr();
      
      SdkPoliza1->creaMovimiento(SdkMovimientoPoliza1);

      ADOQuery2->Next();
      SdkMovimientoPoliza1.Release();
   }

   return;
}
//---------------------------------------------------------------------------

_________________
[img]http://folding.extremeoverclocking.com/sigs/sigimage.php?un=snupoo&t=86565/sigimage.gif[/img]
A programar se aprende programando
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Buscando me encontré con este articulo pero obtengo los mismos resultados. Sad
_________________
[img]http://folding.extremeoverclocking.com/sigs/sigimage.php?un=snupoo&t=86565/sigimage.gif[/img]
A programar se aprende programando
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Hola a todos.

Después de muchas vueltas y romperme la cabeza por fin me respondió el fabricante que es un erro de ellos con su SDK, por lo que no me queda mas que agradecerles su tiempo y esperar a que liberen el parche que corrige el problema.

Saludos.
_________________
[img]http://folding.extremeoverclocking.com/sigs/sigimage.php?un=snupoo&t=86565/sigimage.gif[/img]
A programar se aprende programando
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.