Problemas com alocação variáveis na memória
Enviado: 01 Out 2009 20:06
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
Ao fazer a chamada dela
Ao efetuar acontece comigo uma das 6 hipóteses:
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
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