Notifications
Clear all

Criar DLL para trabalhar no excel ? porque e como?

2 Posts
1 Usuários
0 Reactions
991 Visualizações
(@edcronos2)
Posts: 346
Reputable Member
Topic starter
 

usar recursos externos no vba não é algo tão irregular assim,

mas criar DLL´s para trabalhar no excel normalmente depende de um novo aprendizado em uma nova linguagem oq nem sempre é pratico e facil , alguns tem capacidade outros não tem tempo ou paciência de aprender algo novo

mas em que montar uma dll pode me ser util?
Recusos, pode ficar mais facil criar algo
Velocidade, o excel e o vba estão longe de serem lentos se pegarem os macetes, mas realmente tem coisas que fica dificil melhorar a velocidade quando se fala de bilhões de analises, então uma dll com uma função otimizada e compilada pode ser a solução
Proteção "não que seja impossível quebrar a proteção ou redefinir o projeto, mas fica bem mais dificil"
quem é que vai querer perder tempo em fazer programação reversa de uma dll para piratear uma planilha?

meu motivo é apenas velocidade para grande quantidade de dados,

para quem está acostumado com o basic do vba é um tanto estranho tentar fazer algo no C ou java por exemplo ,
para quem tem facilidade por que não?
tem o vb, cara tem tanto detalhe para cria uma simples dll ... :( :roll: "ok , preguiça"

bem eu achei o Oxygen basic,
é um projeto aberto e pode ser usado por qualquer um,
é bem simples mas é possível escrever funções em algo bem parecido da sintaxe do vba,
e é compilado e não interpretada ,

'StaticArrays
'access static arrays
 
#include "$/inc/console.inc"
 
indexbase 0
 
' One dimension
dim as float line[4] => {1.0, 2.0, 3.0, 4.0}
printl "Line: " & cr
for i=0 to <4 : print line[i] & " " : next : printl
 
' Two dimensions, row, column
dim as float matrix [3*4] => {
11.0, 12.0, 13.0, 14.0,
15.0, 16.0, 17.0, 18.0,
19.0, 20.0, 21.0, 22.0 }
'Get elements
'y-> x
macro gmatrix(y,x) matrix[y*4 +x]
 
printl "Matrix:"
num=10
for i=0 to <3 ' row
   printl "row" i ":  " 
   for j=0 to <4 ' col
      num+=1
      print gmatrix(i,j) & "("  num "), "
   next
next
printl 
 
 
' Three dimensions, row, column, depth
dim as int cube[2*3*4] => {
11,12,13,14,   15,16,17,18,  19,20,21,22,        'row(0)
  23,24,25,26,  27,28,29,30,  31,32,33,34 }      'row(1)
'Get elements
'z-> y-> x
macro gcube(z,y,x) cube[z*3*4 +y*4 +x]
num=10
printl "Cube: "
for i=0 to <2                         'row
   printl "row " i ":   "
   for j=0 to <3                      'col
      printl "col " j ":   "
      for k= 0 to <4                  'depth
         num+=1
         print gcube(i,j,k) & "("  num "), "
      next k
   next j
next i
printl 
 
 
' Four dimensions, row, column, depth, time
dim as int sptime[5*4*3*2] => {0}
'Fetch elements
'z-> y-> x-> w
macro  gsptime(z,y,x,w) sptime[z*4*3*2 +y*3*2 +x*2 +w]
printl "Space-Time: "
printl "Ask Einstein"
  
printl cr & "Enter ..."
waitkey

dá para misturar até assembly

includepath "$/inc/"
$filename "And32count.dll"
$dll
include "RTL32.inc"
extern export

function And32(long a,b,*c)'
 nesse caso diferente do vba todos assumem long, tbm pode ser excrito assim function And32(long a,b,byref c)
   mov eax, a
   mov ecx, b 'avoid using ebx
   and eax, ecx

    addr edi ,c
     mov [edi] , eax

     'the compiler will produce similar assembly code:
    'c=a and b
end function

para  declarar a DLL
no vba
Private Declare Sub And32 Lib "D:ProgramaçãoOxygenBasicAnd32count.dll" Alias "And32" _
                          (ByVal n As Long, ByVal n2 As Long, ByRef out As Long)

me digam , vale a pena ou não?
acho que para quem quer proteger seus projetos tem um caminho para migrar suas rotinas mais importantes e referenciar elas dentro do vba

 
Postado : 24/12/2017 11:04 am
(@edcronos2)
Posts: 346
Reputable Member
Topic starter
 

pelo visto nem interessa a ninguem

 
Postado : 28/12/2017 6:36 pm