No processo de desenvolvimento de software, existem alguns problemas aparentemente simples, mas que são facilmente ignorados pelos desenvolvedores comuns. A existência desses “Bugs” afeta a comercialização do nosso software. Listados abaixo estão vários problemas que o autor encontrou ao usar o Visual Basic para desenvolver software. As soluções são fornecidas aqui para que todos possam discutir e trocar.
1. Evite que o aplicativo carregue duas vezes
Quando nosso aplicativo está sendo executado no Windows, durante a operação, às vezes o minimizamos e ocultamos, ou mudamos para o gerenciador de programas para outras operações e, em seguida, desejamos entrar no aplicativo original. Se esquecermos de reiniciar o aplicativo que acabamos de iniciar, duas cópias do mesmo aplicativo serão carregadas na memória ao mesmo tempo. Isso não apenas ocupa espaço na memória, mas também causa facilmente operação incorreta e perda de dados. Para evitar que isso aconteça, o programa precisa ser capaz de dar um prompt “já carregado” ou entrar diretamente no aplicativo que está sendo carregado pela primeira vez. Este problema parece difícil de resolver, desde que entendamos o mecanismo dos aplicativos de gerenciamento do Windows, ele pode ser facilmente resolvido.
Sabemos que para cada aplicativo em execução, o Windows atribui um “Handle” exclusivo e um código de módulo (Módulo). Quando duas cópias do mesmo programa são executadas ao mesmo tempo, os códigos dos módulos dos dois programas são os mesmos. Portanto, desde que encontremos dois códigos de módulos idênticos na memória, sabemos que duas cópias do programa estão em execução. e pode controlá-lo. As duas funções de interface GetModuleHandle e GetModuleUsage fornecidas pelo Windows podem concluir esta tarefa. O método específico é o seguinte. Primeiro, declare a função API em um novo arquivo de módulo (*.Bas).
DeclareFunctionGetModuleHandleLibKernel(ByVallpPRogName$)
DeclareFunctionGetModuleUsageLibKernel(ByValhModule)
Ao mesmo tempo, crie um subprocesso chamado main. O código no subprocesso é o seguinte:
SubPrincipal()
Tratamento de erros OnErrorGoToerrMain'
Alça do módulo DimhModule'
DimAppCount'O número de aplicativos
appPath$=app.Path /'caminho de inicialização do aplicativo
hModule=GetModuleHandle(appPath$ app.EXEName .exe)'Obtenha o identificador do programa.
AppCount=GetModuleUsage(hModule)'Obtém o código do módulo, ou seja, o número de aplicativos em execução.
lfAppCount>1Then'O número do mesmo aplicativo é maior que 1
O programa MsgBox foi carregado, 64
End' encerra o aplicativo atualmente iniciado
Elsc
mainForm.Show'mainForm é o formulário principal do programa
Fim
SairSub
errPrincipal:
lfErr<>0Então
MsgBox Ocorreu um erro ao iniciar o programa, 64
SairSub
Fim
Fim Sub
Após a conclusão do processo, no menu principal do VB3.0 [opções], selecione o item de menu [Projeto] e defina o item [StartupFrom] como Submain, ou seja, quando o programa é executado, ele inicia primeiro a partir da sub-rotina Submain. Isso garante que o código acima será executado. Submain é o nome do subprocesso acordado em VB3.0 e não pode ser substituído por outros nomes.
Gere novamente o arquivo EXE, inicie o aplicativo no gerenciador de programas, minimize o formulário gerado e execute-o no gerenciador de programas. O usuário verá uma caixa de mensagem informando ao usuário que o aplicativo foi encerrado. execução. O programa acima é usado apenas para evitar o carregamento do segundo programa, mas não entra automaticamente no primeiro programa quando o segundo programa não pode ser iniciado. Para conseguir isso, os procedimentos envolvidos são relativamente complexos e não serão apresentados em detalhes aqui.
2. Determine o caminho de instalação do Windows
No software que desenvolvemos, às vezes chamamos diretamente pequenos aplicativos fornecidos pelo Windows, como calculadoras, planejadores, etc. ou precisamos colocar alguns arquivos especiais no caminho do Windows ou do SYSTEM; Normalmente, o Windows é instalado no diretório C:WINDOWS, mas os usuários podem modificar o nome do diretório inicial do Windows à vontade. Portanto, em nosso software, precisamos determinar o caminho de instalação do Windows. Para esse problema, o Windows fornece duas funções de API: GetWindowsDirectory e GetSystemDirectory, que podem retornar os nomes do diretório do Windows e do diretório SYSTEM.
Para tanto, prepare uma função geral GetWinDir, que retorna o nome do diretório de instalação do Windows. Da mesma forma, você pode escrever GetSysDir, omitido.
Declarar funções de API em arquivos de módulo *.BAS
DeclareFunctionGetWindowsDirectoryLibKernel(ByValipBufferAsString,ByValnSizeAsInteger)asIntegerFunctionGetWinDir()AsStringDimWindir$Windir$=Space$(144)'144 é o comprimento máximo teórico do nome do diretório WINDOWS.
lfGetWindowsDirectory(Windir$,144)=0Então
MsgBox não pode determinar o caminho de instalação do WINDOWS, 16
ObterWinDir=
Outro
Windir$=ALLTrim$(Windir$)
ifRight$(Windir$,1)<>“/”thenWindir$=Windir$ “/”
'Adiciona barra invertida
GetWinDir=Windir$
Fim
Função Final
ALLTRIM é uma função usada para remover caracteres nulos em uma string.
FunçãoALLTrim(FatStr$)AsString
'thisFunctiondeleteSpacecharinstringofFatStr$
DimSlimStr$,I
SlimStr$=FatStr$
I=lnStr(SlimStr$,Chr$(0))'A posição do espaço
IfIThenSlimStr$=Esquerda$(SlimStr$,I-1)
SlimStr$=Ltrim$(Rtrim$)(SlimStr$))
AIITrim$=SlimStr$
Função Final
3. Solicitar para salvar os dados antes de fechar o formulário
De modo geral, normalmente existem 5 maneiras de fechar um aplicativo:
1. O usuário seleciona o comando [Fechar] no ControlBox do formulário atual.
2. Estimule o código de comando final no programa (como End, Unload)
3. Saia do Windows
4. Feche o aplicativo na lista de tarefas do Windows.
5. Durante a operação de vários documentos, fechar o formulário MDI principal fará com que o formulário sub-MDI seja fechado.
Antes de fechar um aplicativo, precisamos dar ao usuário a oportunidade de perguntar "Deseja salvar os dados?" ou cancelar a operação de "fechar". Em VB, o fechamento do formulário aciona o evento Form_Unload. Podemos programar este evento para controlar a operação de “fechamento”. Supondo que já exista um procedimento FileSave usado para salvar arquivos, você pode escrever o programa assim.
SubForm_Unload(CancelAslnteger)
selectcastMsagbox("Salvar dados?", 3 32)
'Sim, não, Cnacel três opções
case6'SIM
FileSave' salva dados
case2'cancelar
Cancel=TRUE'Cancelar a operação de fechamento
caseelse'NO' não salva, execute a operação de desligamento
Finalizar seleção
Fim Sub
A variável Cancel no código acima é uma variável de saída inerente ao próprio evento Form_unload. Ela entrega mensagens ao processo de controle do Windows para controlar a direção do programa.
Os três exemplos acima são apenas alguns pequenos problemas no processo de melhoria de software. Para tornar o software estável e confiável, é necessário fazer muito trabalho cuidadoso e cuidadoso. Alguns problemas podem ser resolvidos explorando o potencial do próprio VB e dominando profundamente as habilidades operacionais de alguns processos, enquanto alguns problemas mais complexos envolvem as operações subjacentes do Windows e podem ser facilmente realizados usando as funções da API do Windows; Claro, isso requer uma certa compreensão das funções e mecanismos do Windows. À medida que o nível de programação do Windows melhora, aprenderemos gradualmente e gostaremos de usar as funções da API para auxiliar na conclusão da codificação do programa. ->