alberonisse 15 Posted September 20, 2020 Report Share Posted September 20, 2020 (edited) O intuído desse tópico é apenas para exibir os vídeos que postei em meu canal do youtube sobre um estudo que fiz na ACBrLib e alterei a forma como é feita as chamaras e retornos na tentativa de otimizar ainda mais nesse sentido, resumindo a forma como é feira essa comunicação, Agradecimento especial ao ACBr e todos que fazem parte desse projeto maravilhoso. CONFIRAM OS VIDEOS Vídeo 1: https://youtu.be/lf130_Gtx3o Vídeo 2: https://youtu.be/ap2w20VsEsA Video 3: https://youtu.be/PyKwrYLl4ao Edited September 20, 2020 by alberonisse Removi uma quebra de linha 1 Link to post Share on other sites
Rafael Dias 1,215 Posted September 21, 2020 Report Share Posted September 21, 2020 So uma pergunta que vai desalocar a memoria das structs que ta retornando ? Rafael Dias Ajude o Projeto ACBr crescer - Assine o SAC Desenvolvedor ACBrLib. Link to post Share on other sites
alberonisse 15 Posted September 21, 2020 Author Report Share Posted September 21, 2020 9 minutos atrás, Rafael Dias disse: So uma pergunta que vai desalocar a memoria das structs que ta retornando ? O deslocamento é feito normalmente pela própria lib, o retorno é apenas do ponteiro para a struct que a lib armazena os dados do ultimo retorno Link to post Share on other sites
Rafael Dias 1,215 Posted September 21, 2020 Report Share Posted September 21, 2020 Em qual chamada ? Não vi nenhuma, isso é codigo nativo e não gerenciado, se você não desalocar a memoria fica para sempre la. Rafael Dias Ajude o Projeto ACBr crescer - Assine o SAC Desenvolvedor ACBrLib. Link to post Share on other sites
alberonisse 15 Posted September 21, 2020 Author Report Share Posted September 21, 2020 23 minutos atrás, Rafael Dias disse: Em qual chamada ? Não vi nenhuma, isso é codigo nativo e não gerenciado, se você não desalocar a memoria fica para sempre la. Chefe você sabe que quando carregamos uma dll para um processo é o mesmo que injetar um novo codigo no mesmo então tanto a lib como o aplicatico que a carregou vai ter acesso aos mesmos dados na memória ram, o ponteiro nada mais é que o endereço para esses dados, acredito que o amigo também já viu que em todas as chamadas a própria lib armazena o retorno na struct "TLibRetorno" para ser usado pela função "UltimoRetorno" caso seja necessário, então o que fiz foi apenas resumir o processo e já pegar essa struct direto na memoria ram Link to post Share on other sites
Rafael Dias 1,215 Posted September 21, 2020 Report Share Posted September 21, 2020 Meu chefe isso não é assim você esta totalmente enganado, se fosse assim eu poderia manipula sua string sem necessidade de artimanha. Rafael Dias Ajude o Projeto ACBr crescer - Assine o SAC Desenvolvedor ACBrLib. Link to post Share on other sites
alberonisse 15 Posted September 21, 2020 Author Report Share Posted September 21, 2020 Então você esta dizendo que todas as documentações/manuais do Assembly estão enganados? Link to post Share on other sites
Rafael Dias 1,215 Posted September 21, 2020 Report Share Posted September 21, 2020 Não sei que manual tu leu mas eu tenho certeza que se eu mexer no seu ponteiro de forma unsafe posso bagunçar a memoria e com certeza vai dar acess violation. Para você ter uma ideia bibliotecas mas antigas e maiores que esta nossa já usam de forma similar a que usamos, veja a libxml2 como ela funciona. Rafael Dias Ajude o Projeto ACBr crescer - Assine o SAC Desenvolvedor ACBrLib. Link to post Share on other sites
alberonisse 15 Posted September 21, 2020 Author Report Share Posted September 21, 2020 (edited) como vai dar acess violation na LEITURA dos dados que não tem proteção?, chefe com todo respeito estude mais um pouco sobre o assunto até dados protegidos é possível liberar o acesso Edited September 21, 2020 by alberonisse Link to post Share on other sites
Rafael Dias 1,215 Posted September 21, 2020 Report Share Posted September 21, 2020 Eu falei de manipulação e não de leitura Citar Não sei que manual tu leu mas eu tenho certeza que se eu mexer no seu ponteiro de forma unsafe posso bagunçar a memoria e com certeza vai dar acess violation. Rafael Dias Ajude o Projeto ACBr crescer - Assine o SAC Desenvolvedor ACBrLib. Link to post Share on other sites
alberonisse 15 Posted September 21, 2020 Author Report Share Posted September 21, 2020 Mais o aplicativo faz o que além de uma leitura? Link to post Share on other sites
alberonisse 15 Posted September 21, 2020 Author Report Share Posted September 21, 2020 (edited) Acho que sua duvida é em relação ao aplicativo, então vou explicar essa parte também, como na modificação que fiz na struct "TLibRetorno" para armazenar o tamanho da mensagem, o aplicativo quando LER esses dados ele primeiro faz a alocação usando essa informação e faz uma copia da mensagem, entendeu?, veja o vídeo 3 que você vai entender melhor Edited September 21, 2020 by alberonisse Link to post Share on other sites
Rafael Dias 1,215 Posted September 21, 2020 Report Share Posted September 21, 2020 Eu entendi exatamente o que quer fazer, mas isso adiciona uma dificuldade desnecessária, além de ser uma mudança grande e impactante ao codigo. Sobre o que você fez na parte cliente do Java tem como fazer structs usando o JNA tbm, então não tem necessidade daquele monte de codigo bastava gerar uma classe herdando da classe Struct. https://stackoverflow.com/questions/36747228/c-struct-to-java-jna-structure-pointer-to-struct Rafael Dias Ajude o Projeto ACBr crescer - Assine o SAC Desenvolvedor ACBrLib. Link to post Share on other sites
alberonisse 15 Posted September 21, 2020 Author Report Share Posted September 21, 2020 1 minuto atrás, Rafael Dias disse: Eu entendi exatamente o que quer fazer, mas isso adiciona uma dificuldade desnecessária, além de ser uma mudança grande e impactante ao codigo. Sobre o que você fez na parte cliente do Java tem como fazer structs usando o JNA tbm, então não tem necessidade daquele monte de codigo bastava gerar uma classe herdando da classe Struct. https://stackoverflow.com/questions/36747228/c-struct-to-java-jna-structure-pointer-to-struct Em relação a mudança no código oficial eu também não faria pois seria extremamente estressante para quem já usa atualmente, como falei no vídeo e na descrição é apenas para estudo, em relação a struct java jna eu sei e não vi motivo pra usar, MEU REI, não é feio reconhecer quando uma melhoria é uma melhoria independente de qualquer coisa, não me acho melhor que neguem só porque estudo, os livros estão disponíveis pra quem quiser, agora me diga uma coisa sr moderador meu humilde conhecimento lhe incomodou? não soma forças ao projeto? sinto que você quer derrubar meu posicionamento sem antes verificar com cautela, me diga uma coisa, essa partícula de poeira no universo de meu Deus soma ou não soma ao projeto ACBr? Link to post Share on other sites
alberonisse 15 Posted September 21, 2020 Author Report Share Posted September 21, 2020 @Daniel Simoes O que o amigo acha disso? Link to post Share on other sites
Fundadores Daniel Simoes 8,702 Posted September 21, 2020 Fundadores Report Share Posted September 21, 2020 Eu acho que isso dificultaria o uso da Lib por Outros programadaores... Ja temos muitas aplicações rodando no modelo de troca de mensagens atuais... mudar isso, quebraria a compatibilidade Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Link to post Share on other sites
alberonisse 15 Posted September 21, 2020 Author Report Share Posted September 21, 2020 2 horas atrás, Daniel Simoes disse: Eu acho que isso dificultaria o uso da Lib por Outros programadaores... Ja temos muitas aplicações rodando no modelo de troca de mensagens atuais... mudar isso, quebraria a compatibilidade Concordo com o amigo, inclusive pensei nisso antes de fazer os vídeos, mais sem levar em consideração a possibilidade de alterar a lib oficial e como é uma alteração simples os próprios usuários podem fazer e usar, essa alteração abre a possibilidade inclusive de retornar o xml da NF com muita facilidade Link to post Share on other sites
Fundadores Daniel Simoes 8,702 Posted September 21, 2020 Fundadores Report Share Posted September 21, 2020 poucos usam a Lib diretamente... as Classes de alto nível, já abstraem as chamadas e a alocação de memória... 1 Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Link to post Share on other sites
alberonisse 15 Posted September 21, 2020 Author Report Share Posted September 21, 2020 12 minutos atrás, Daniel Simoes disse: poucos usam a Lib diretamente... as Classes de alto nível, já abstraem as chamadas e a alocação de memória... Em resumo é uma boa alteração que iria otimizar bastante mais só seria utilizado por usuários avençados, né isso? Link to post Share on other sites
Juliomar Marchetti 3,845 Posted September 21, 2020 Report Share Posted September 21, 2020 Ou nem isso talvez 1 Juliomar Marchetti Ajude o Projeto ACBr crescer - Assine o SAC skype: juliomar telegram: juliomar http://www.juliomarmarchetti.com.br Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil Link to post Share on other sites
alberonisse 15 Posted September 21, 2020 Author Report Share Posted September 21, 2020 23 minutos atrás, Juliomar Marchetti disse: Ou nem isso talvez rsrs Link to post Share on other sites
Fundadores Daniel Simoes 8,702 Posted September 21, 2020 Fundadores Report Share Posted September 21, 2020 1 hora atrás, alberonisse disse: Em resumo é uma boa alteração que iria otimizar bastante mais só seria utilizado por usuários avençados, né isso? Eu não creio isso... a modificação não trará mais performance... Eu particularmente, não gosto de API que retornam tipos complexos, como uma estrutura... gosto de soluções, simples... e o que pode ser mais simples que uma área de memória, com uma String Null-terminated ? Esse é o padrão usado pela API do Windows, pelo OpenSSL, pela LibXML2, pelas DLLs de fabricantes de ECF e SAT, etc... ou seja.. é o padrão de mercado... Porque todos usam dessa maneira ? Porque é simples de compreender, e amplamente compatível... Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Link to post Share on other sites
alberonisse 15 Posted September 21, 2020 Author Report Share Posted September 21, 2020 45 minutos atrás, Daniel Simoes disse: Eu não creio isso... a modificação não trará mais performance... Eu particularmente, não gosto de API que retornam tipos complexos, como uma estrutura... gosto de soluções, simples... e o que pode ser mais simples que uma área de memória, com uma String Null-terminated ? Esse é o padrão usado pela API do Windows, pelo OpenSSL, pela LibXML2, pelas DLLs de fabricantes de ECF e SAT, etc... ou seja.. é o padrão de mercado... Porque todos usam dessa maneira ? Porque é simples de compreender, e amplamente compatível... Entendi, amigo @Daniel Simoes desculpe minhas "loucuras", tenho muito respeito pelo amigo e pelo projeto e não quero de forma alguma prejudicar, não vou mais fazer esse tipo de "Ajuda", nem vou mais me pronunciar aqui no forum pois não sei ficar calado quando estou certo, Desculpe mais tenho que falar isso: Em relação ao padrão de mercado, o mesmo inclusive api do win, jogos, drivers, independente da linguagem pois tudo vai ser convertido para linguagem do processador, é alocar antecipadamente quando o length não é variável ou quando sei o length antecipadamente e apenas quando quero uma copia dos dados, quando acontece de ser variável se o tipo de informação for uma String é retornado um ponteiro com endereço da informação na memoria (Esse ponteiro não é armazenado na memoria e sim em um registrador do processador) ou alterado o do informado no parâmetro e para saber o final como o amigo falou é usado o byte 0 ou (String Null-terminated), Em relação ao Drive do SAT, retorna um ponteiro para uma String que dependendo da linguagem pode ou não fazer uma copia (Java tem que ser uma copia) e para saber o final byte 0(String Null-terminated). DESCULPE NOVAMENTE E AGRADEÇO PELA OPORTUNIDADE Link to post Share on other sites
Recommended Posts