#include <windows.h>
#include <stdio.h>

#define	ScaleError			0
#define	ScaleInMotion		1
#define	ScaleStable			2
#define	ScaleOutOfRange		3
#define	ProteqNotFound		4

#define	BIDS		0
#define	BIQP810	1
#define	B9091		2
#define	B8132		3
#define	BID1000  4
#define	BBP		5

WINAPI WinMain(HINSTANCE , HINSTANCE , LPSTR , int )
{
	int			status;
	char			gross[9],tare[9],net[9],unitd[3],msg[100];
	HINSTANCE	Hdll;
	HANDLE		hScale;
	DWORD			teste;

  	int (* AttachScale) (HANDLE *,int,int,int,int,int);

	int (* ReadScale) (HANDLE *,int,char *,char *,char *,char *);

	if( (Hdll=GetModuleHandle("PcScale.DLL")) == NULL )
	{
        if( (Hdll = LoadLibrary("PcScale.DLL")) == NULL )
        {
				MessageBox(NULL,"Erro carregando PcScale.dll","Demo",MB_OK);
				return(true);
        }
	}
   if(( AttachScale=(int(*)(HANDLE *,int,int,int,int,int))GetProcAddress(Hdll,"AttachScale")) != NULL)
   {
		status = (* AttachScale)(&hScale,1,4800,7,2,2);

		if( status < 0 )
    	{
			switch(status)
			{
				case -2:
        		sprintf(msg,"Erro abrindo com");
				break;

		      case -3:
	         sprintf(msg,"Com inválida");
    	      break;

		      case -4:
    	      sprintf(msg,"Muitos arquivos abertos");
        	   break;

		      case -5:
    	      sprintf(msg,"Acesso a Com não permitido");
        	   break;

				case -6:
    	      sprintf(msg,"Erro setando parâmetros de comunicação");
        	   break;

		      case -7:
    	      sprintf(msg,"Erro setando timeout de comunicação");
        	   break;

		      case -100:
    	      sprintf(msg,"Arquivo vazio");
        	   break;

		      case -101:
    	      sprintf(msg,"Disco cheio");
        	   break;

		      case -106:
    	      sprintf(msg,"Input inválido");
        	   break;

		      default:
    	      sprintf(msg,"Erro Genérico");
			}
		}
      else
      {
		   if(( ReadScale=(int(*)(HANDLE *,int,char *,char *,char *,char *))GetProcAddress(Hdll,"ReadScale")) != NULL)
			{
				status=(* ReadScale)(&hScale,BIDS,gross,tare,net,unitd);
           	if( status == ScaleError ) sprintf(msg,"Erro de leitura da balanca");
            else if( status == ProteqNotFound ) sprintf(msg,"Chave de licença não encontrada");
            else
            {
					sprintf(msg,
					"Bruto: %s     Tara: %s     Líquido: %s    %s",
					gross,tare,net,unitd
					);
            }
			}
			else
			{
    			teste=GetLastError();
      		sprintf(msg,"Erro %d localizando ReadScale",teste);
			}
		}
	}
   else
   {
		teste=GetLastError();
  		sprintf(msg,"Erro %d localizando AttachScale",teste);
   }
	MessageBox(NULL,msg,"Demo",MB_OK);
	FreeLibrary(Hdll);
	return(true);
}


