Você está aqui: Delphi ::: Dicas & Truques ::: Bilbiotecas Estáticas (obj) e Dinâmicas (DLLs) |
|
Carregando uma DLL a partir de seus programas Delphi usando Dynamic loading (carregamento dinâmico)Quantidade de visualizações: 22070 vezes |
|
Por carregamento dinâmico (Dynamic loading) entendemos a técnica de carregar e liberar uma DLL (Dynamic Link Library) sempre que quisermos sem a necessidade da criação de uma unit de importação (como fazemos com o carregamento estático). O processo de carregar uma DLL dinâmicamente envolve os seguintes passos: a) Devemos declarar uma variável ou tipo procedure ou function que descreve a rotina que queremos chamar na DLL. Se a DLL foi escrita em outra linguagem diferente de Delphi, teremos que traduzir os tipos de dados. Você pode verificar como esta tradução é feita olhando as declarações de importações na unit Windows.pas e comparando com as mesmas funções na API do Windows; b) Usamos a função LoadLibrary() da API do Windows para carregar a DLL; c) Efetuamos uma chamada à função GetProcAddress() para obter um ponteiro para o endereço da rotina na DLL; d) Chamamos a rotina desejada; e) Chamamos a função FreeLibrary() da API do Windows para liberar a DLL, devolvendo ao sistema a memória alocada durante a sua execução. Para esta demonstração faremos uso da DLL MinhaDLL.dll, criada em uma das dicas nesta mesma seção. O primeiro passo é saber a assinatura da função contida na DLL e que pretendemos usar em nosso programa Delphi. A DLL MinhaDLL.dll contém uma função Somar() que recebe dois Integer e retorna a soma como um Integer: function Somar(a, b: Integer): Integer; stdcall; begin Result := a + b; // retorna a soma end; Uma vez que já sabemos a assinatura da função que queremos chamar na DLL, podemos escrever o seguinte código Delphi: procedure TForm3.Button1Click(Sender: TObject); type // vamos declarar um tipo function TSomarFuncao = function(a, b: Integer): Integer; stdcall; var Somar: TSomarFuncao; // uma variável que representará a função DLLHandle: THandle; // este é o handle para a DLL begin // vamos carregar a DLL DLLHandle := LoadLibrary('MinhaDLL.dll'); try // vamos obter o endereço da função na DLL Somar := GetProcAddress(DLLHandle, 'Somar'); // vamos chamar a função agora if Assigned(Somar) then ShowMessage(IntToStr(Somar(4, 3))) else ShowMessage('Não foi possível chamar a rotina desejada'); finally FreeLibrary(DLLHandle); // vamos liberar a DLL end; end; Note que, no carregamento dinâmico, se a DLL não puder ser encontrada nada acontecerá, a menos que você remova o bloco try...finally do código, o que geraria um erro de acesso à memória. Dentro da IDE do Delphi veríamos a mensagem: Debugger Exception Notification Project Project2.exe raised exception class EAccessViolation with message 'Access violation at address 00000000. Write of address 00000000'. Fora da IDE a mensagem de erro é bem parecida. Lembre-se de que o os aplicativos procuram as DLLs primeiro no diretório local e em seguida nos diretórios Windows, System e System32. Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
|
Link para compartilhar na Internet ou com seus amigos: | |
PHP ::: Fundamentos da Linguagem ::: Estruturas de Controle |
PHP para iniciantes - Como usar a usar o laço do...while em PHP - Como usar o laço do...while da linguagem PHPQuantidade de visualizações: 14056 vezes |
O laço do...while, ou loop do...while (faça...enquanto) da linguagem PHP é bem parecido com o laço while (enquanto). A diferença é que no do...while, a condição é testada no final da primeira iteração, o que garante que o laço será executado no mínimo uma vez. Veja um exemplo de seu uso:<? $valor = 1; do{ echo $valor . "<br>"; $valor++; }while($valor <= 10); ?> Este laço exibirá o seguinte resultado: 1 2 3 4 5 6 7 8 9 10 Lembre-se que o teste de continuidade do laço do...while ocorre no final da primeira iteração, enquanto no laço while(), o teste de continuidade ocorre antes da primeira iteração. Dica revisada, atualizada e testada no PHP 8. |
VB.NET ::: Desafios e Lista de Exercícios Resolvidos ::: VB.NET Básico |
Exercício Resolvido de VB.NET - Um programa VB.NET que receberá a duração de um evento expresso em segundos e exiba-o expresso em horas, minutos e segundosQuantidade de visualizações: 221 vezes |
Pergunta/Tarefa: Escreva um programa VB.NET que receberá a duração de um evento expresso em segundos e exiba-o expresso em horas, minutos e segundos. Seu programa deverá exibir uma saída parecida com: Informe a duração do evento em segundos: 3712 Duração do evento: 01:01:52 Veja a resolução comentada deste exercício usando VB.NET: Imports System Module Program ' função principal do programa VB.NET Sub Main(args As String()) ' vamos solicitar a duração do evento em segundos Console.Write("Informe a duração do evento em segundos: ") Dim duracao_segundos As Integer = Int32.Parse(Console.ReadLine()) ' vamos obter a quantidade de horas do evento Dim horas As Integer = duracao_segundos \ 3600 ' vamos obter os minutos Dim minutos As Integer = (duracao_segundos \ 60) Mod 60 ' vamos obter os segundos restantes Dim segundos As Integer = duracao_segundos Mod 60 ' vamos exibir a duração do evento em horas, minutos e segundos Console.Write("Duração do evento: {0}:{1}:{2}", horas.ToString("D2"), minutos.ToString("D2"), segundos.ToString("D2")) Console.WriteLine(vbCrLf & "Pressione qualquer tecla para sair...") ' pausa o programa Console.ReadKey() End Sub End Module |
Java ::: Dicas & Truques ::: Matemática e Estatística |
Como calcular desvio padrão em Java - Java para Matemática e EstatísticaQuantidade de visualizações: 2555 vezes |
Em Matemática e Estatística, o Desvio padrão (em inglês: Standard Deviation) é uma medida de dispersão, ou seja, é uma medida que indica o quanto um conjunto de dados é uniforme. Quando o desvio padrão é baixo, isso quer dizer que os dados do conjunto estão mais próximos da média. Como calcular o desvio padrão de um conjunto de dados? Vamos começar analisando a fórmula mais difundida na matemática e na estatística: \[\sigma = \sqrt{ \frac{\sum_{i=1}^N (x_i -\mu)^2}{N}}\] Onde: a) __$\sigma__$ é o desvio; b) __$x_i__$ é um valor qualquer no conjunto de dados na posição i; c) __$\mu__$ é a média aritmética dos valores do conjunto de dados; d) N é a quantidade de valores no conjunto. O somatório dentro da raiz quadrada nos diz que devemos somar todos os elementos do conjunto, desde a posição 1 até a posição n, subtrair cada valor pela média do conjunto e elevar ao quadrado. Obtida a soma, nós a dividimos pelo tamanho do conjunto. Veja o código Java completo que obtém o desvio padrão a partir de um conjunto de dados contendo quatro valores: package arquivodecodigos; public class Estudos{ public static void main(String args[]){ // conjunto dos dados double conjunto[] = {10, 30, 90, 30}; double soma = 0.0; // soma dos elementos double desvioPadrao = 0.0; // desvio padrão int tam = conjunto.length; // tamanho dos dados // vamos somar todos os elementos for(int i = 0; i < tam; i++){ soma = soma + conjunto[i]; } // agora obtemos a média do conjunto de dados double media = soma / tam; // e finalmente obtemos o desvio padrão for(int i = 0; i < tam; i++){ desvioPadrao = desvioPadrao + Math.pow(conjunto[i] - media, 2); } // mostramos o resultado System.out.println("Desvio Padrão Populacional: " + Math.sqrt(desvioPadrao / tam)); System.out.println("Desvio Padrão Amostral: " + Math.sqrt(desvioPadrao / (tam - 1))); } } Ao executar este código Java nós teremos o seguinte resultado: Desvio Padrão Populacional: 30.0 Desvio Padrão Amostral: 34.64101615137755 Veja que, para calcular o Desvio Padrão Populacional, nós dividimos o somatório pela quantidade de elementos no conjunto, enquanto, para calcular o Desvio Padrão Amostral, nós dividimos o somatório pela quantidade de elementos - 1 (cuidado com a divisão por zero no caso de um conjunto com apenas um elemento). |
Java ::: Coleções (Collections) ::: ArrayList |
Java para iniciantes - Como embaralhar os elementos de uma ArrayList usando o método shuffle() da classe CollectionsQuantidade de visualizações: 13155 vezes |
Nesta dica mostrarei como usar o método estático shuffle() da classe Collections da linguagem Java para misturar, ou seja, embaralhar os elementos de um objeto da classe ArrayList. Veja o código completo: package arquivodecodigos; import java.util.ArrayList; import java.util.Collections; public class Estudos{ public static void main(String[] args){ // cria uma ArrayList que conterá strings ArrayList<String> nomes = new ArrayList<String>(); // adiciona itens na lista nomes.add("Carlos"); nomes.add("Maria"); nomes.add("Fernanda"); nomes.add("Osmar"); // exibe os elementos da ArrayList System.out.println("Ordem original:\n"); for(int i = 0; i < nomes.size(); i++){ System.out.println(nomes.get(i)); } // Vamos embaralhar os itens da ArrayList Collections.shuffle(nomes); // exibe os elementos da ArrayList System.out.println("\nElementos embaralhados:\n"); for(int i = 0; i < nomes.size(); i++){ System.out.println(nomes.get(i)); } System.exit(0); } } Ao executar este código nós teremos o seguinte resultado: Ordem original: Carlos Maria Fernanda Osmar Elementos embaralhados: Carlos Fernanda Osmar Maria |
Ruby ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes) |
Como retornar o tamanho de um array em Ruby usando a função sizeQuantidade de visualizações: 6602 vezes |
Em algumas situações nós precisamos saber como retornar a quantidade de itens em um array Ruby. Para isso nós podemos usar a função size do objeto Array. Veja o exemplo: # vamos declarar um array com 5 elementos valores = [3, 6, 78, 32, 1] # vamos obter o seu tamanho tamanho = valores.size # e mostramos o resultado puts "O array contém #{tamanho} elementos" Ao executar este código Ruby nós teremos o seguinte resultado: O array contém 5 elementos |
Desafios, Exercícios e Algoritmos Resolvidos de Ruby |
Veja mais Dicas e truques de Ruby |
Dicas e truques de outras linguagens |
C# - Como retornar a quantidade de elementos que podem ser armazenados na List do C# sem redimensioná-la |
Códigos Fonte |
Software de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |