Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    2

    Dll che follia :-)

    Ciao a tutti...da due settimane sono chino sul pc alla ricerca di qualcosa per creare una dll...
    In pratica da un foglio excel voglio interpellare le funzioni dentro la dll, quindi uso VBA....
    Il codice che bisogna metter nella dll è VBA.
    In pratica una dll funzionante in c++ l'ho fatta (la somma ihihih) ma se la zippo e la metto in un altro pc non va, perchè?

    Poi....

    per scrivere una dll in vba sto usando visual studio 2008, ho provato a modificare il file link.exe per includere un file .def ma nulla...aggghhhhrr

    Che devo fare??Illuminatemi please

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Cosi' come hai espresso il problema, non si puo' certo darti nessuna indicazione ...

    Se spieghi meglio la situazione e il problema (incluso il linguaggio di programmazione e l'eventuale codice gia' scritto) si vede di seguire il discorso .... altrimenti ,,,
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    2
    Ok, ti spiego in dettaglio....Praticamente ho del codice scritto in VBA sull'editor di excel e sto cercando di capire il meccanismo delle DLL per proteggere il codice. Mettere il codice, cioè, nella dll e fare una procedura in excel che la richiami.
    Nello studio della situazione sono riuscito a creare(dopo un pò...) una dll con Visual C++ con una semplice somma che funziona, ma se porto la dll e l'xls che la richiama in un altra macchina non và...Credo bisogna ricompilarla.

    Il problema è che scrivendo il codice in visual c++ dovrei ritradurre tutta la proc VBA in quel linguaggio...Quindi sto testando una soluzione di DLL in VBA, ma non capisco dove sbaglio.
    Il tutto sviluppato tramite Visual Studio 2008...

    Posto il codice della procedurina di prova:


    Allora il progetto che dovrebbe sviilupparmi la DLL è composto da una classe vuota:

    Public Class Class1

    End Class

    Chiamata Class1.vb

    poi la procedura dentro un modulo:

    Module Prova1

    Public Sub Main()
    End Sub

    Public Sub prova(ByVal ii As String)

    Dim I(4) As Integer
    Dim j, K As Integer

    For j = 0 To UBound(I)
    K = InputBox("Inserisci un valore compreso tra 3 e 5")
    If (K > 5) Or (K < 3) Then
    MsgBox("Azzo scrivi bestia")
    Exit Sub
    End If
    I(j) = Int((5 - 3 + 1) * Rnd() + K)
    ' MsgBox (I(j))

    Select Case I(j)
    Case 3
    MsgBox("Numero casuale = 3 ")
    Case 5
    MsgBox("Numero casuale = 5 ")
    Case Else
    MsgBox("ne 5 nè 2 ma..." & I(j) & "Il tuo messaggio è " & ii)

    End Select
    Next j
    MsgBox("Grazie e arrivederci")


    End Sub



    End Module

    con il metodo main....

    ed un file .def per esportare le funzioni, ma che ho scoperto bisogna far compilare nel progetto modificando link.exe

    Il file def è cosi composto:

    LIBRARY Tentativo11
    DESCRIPTION "File def di Tentativo11.dll"
    EXPORTS

    prova = ?prova@Prova1@@AAGXXZ
    Main = ?Main@Prova1@AAGXXZ

    Ho anche provato con l'indicizzazione

    prova @1
    Main @2
    ma nulla

    il codice excel invece è:

    Option Explicit

    Public Declare Sub prova Lib "TentativoNew.dll" (ByVal Messaggio As String)
    Public Declare Function SetDllDirectory Lib "Kernel32" Alias "SetDllDirectoryA" (ByVal path As String) As Boolean

    Sub smigol()
    Dim ok As Boolean
    Dim percorso, Leggi As String


    percorso = ThisWorkbook.path
    ok = SetDllDirectory(percorso)
    If ok Then
    Leggi = InputBox("Inserisci la frase del giorno")
    Call prova(Leggi)
    End If

    End Sub


    Quindi riepilogando, con visual studio mi crea un file .dll , ma dall'xls non trova il punto di accesso alla dll nonostante abbia provato ad aggiugere in file .def modificanto il link.exe e rinominando il vecchio link.exe in link32.exe in questa maniera... :

    File LINK.EXE
    Module Link
    Public Sub Main()
    Dim cmd As String
    Dim fOut As Long
    Dim sOut As String
    Dim sDef As String


    cmd = Command$()
    If InStr(cmd, "/DLL ") > 0 And InStr(cmd, "VBAEXE6.LIB") > 0 Then
    fOut = InStr(cmd, "/OUT:")
    sOut = Mid(cmd, fOut + 6, InStr(cmd, "/BASE:") - fOut - 8)
    sDef = Left(sOut, Len(sOut) - 3) + "def"
    If Len(Dir(sDef)) Then
    cmd = cmd & " /DEF:""" & sDef & """"
    End If
    End If

    Shell("LINK32.EXE " & cmd)
    End Sub
    End Module

    sempre dentro un modulo.....

    E' chiaro adesso...ci sto rincoglionendo :-)

    Grazie per la risp anticipatamente...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.