Problemas com alocação variáveis na memória

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

sambomb
Usuário Nível 3
Usuário Nível 3
Mensagens: 250
Registrado em: 24 Out 2008 17:02
Localização: Itaocara - RJ - Brasil

Problemas com alocação variáveis na memória

Mensagem por sambomb »

Olá, utilizo xharbour 1.1.0 e estou tendo problemas com a alocação de memória, tenho uma chamada a DLL (Daruma32.DLL) que passo uma string como referência

Código: Selecionar todos

   DLL32 FUNCTION D_MFDINFOR(cIndice AS STRING, @cInfo AS STRING); //-- Samir 24/8/2009
         AS _INT PASCAL FROM "Daruma_FIMFD_RetornaInformacao";
         LIB nLib32
Ao fazer a chamada dela

Código: Selecionar todos

****************************************************************************
METHOD PegaNumeroSerie() CLASS TFISPRN
****************************************************************************
*
* Obter o numero de serie da impressora
* Parametros:
* Retorno: nLastResult
*
* Autor: Samir
* 24/8/2009 - 14:11:51
*
****************************************************************************
Private cNumeroSerie := ""

   cNumeroSerie := Space(15)

   if ::EcfType == ecf_daruma
      /* 
      if ::cModelo == "1"  //-- Samir 14/9/2009

         ::nLastResult := D_NUMSERIE(@cNumeroSerie)
         cNumeroSerie := SZero(cNumeroSerie,8)
         
         Alert("Modelo 1")

      else
     */ 
         cNumeroSerie := Space(20)  //-- Samir 30/9/2009
         ::nLastResult := D_MFDINFOR("78",@cNumeroSerie)

         Alert("Modelo 2")

      //end
      //-- Função que apresenta usa um MsgInfo para apresentar o tipo, tamanho e valor da variavel
      DadosVar(cNumeroSerie,.T.,"cNumeroSerie parametro")
      //-- Verificando se a função da DLL teve sucesso
      If ::nLastResult = 1

         Alert("CAIU")
         Try//-- RemNaoImp, remover caracteres não imprimiveis(1 a 32) e aplicar PadR() a variavel
            ::cNumeroSerie := RemNaoImp(cNumeroSerie,.T.)
         catch
            Msg("Erro!")
         end

      end
      
      DadosVar(::cNumeroSerie,.T.,"::cNumeroSerie dados")

   end

return ::nLastResult
/*------------------------------------------------------------------------*/

Ao efetuar acontece comigo uma das 6 hipóteses:
  • Retornar um texto que não esta relacionado com o relacionado e não instancionado nessa sequencia, no meu caso "Relatorio X DAV"
  • Retornar caracteres estranhos, exemplo */+..~¨41
  • Retornar vazio
  • Travar o programa sem sequer enviar mensagem de erro
  • Travar o programa e requisitar envio de erro para o windows
  • Retornar o numero de série da impressora
Alguem sabe como posso resolver isso? To batendo a cabeça a quase 1 semana e o prazo do PAF já ta estourando, preciso muito resolver isso urgentemente!
Imagem

Rca Sistemas - Itaocara - RJ
Responder