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

    [VBA EXCEL] Chiamare una dll c++ da vba Excel

    Ciao a tutti,

    avrei bisogno di una mano.

    Sto cercando di richiamare una dll da Excel, ma ottengo un errore.

    La dll è scritta in c++ e il prototipo è il seguente:

    codice:
    static __declspec(dllexport) int My_DLL_P(string file, double* result);

    In Excel (64bit) la dichiaro nel seguente modo:

    codice:
    Declare PtrSafe Function My_DLL_P Lib "(PATH)\My_DLL.dll" (ByRef xml_file As String, ByRef perfType() As Double) As Integer

    E la utilizzo così:

    codice:
       Dim results(2) As Double
       Dim sol As Integer
       sol = My_DLL_P(objDom.XML, results())
       Debug.Print CStr(sol)
    objDom.XML restituisce tutto il contenuto di un file xml. La mia dll dovrebbe analizzare il contenuto e restituire un integer (sol) oltre che 3 valori salvati in results()

    Quando provo ad esegure la funzione in Excel mi compare il seguente errore:

    Errore di run-time '453':

    Impossibile trovare il punto di ingresso My_DLL_P in (PATH)\My_DLL.dll


    (PATH) indica il percorso della cartella in cui si trova il file My_DLL.dll


    Qualcuno ha qualche idea del perchè ???


    Grazie mille!

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2014
    residenza
    Vicenza
    Messaggi
    318
    Mi sembra che per far interagire VB6 (o VBA) con le DLL scritte in C++, la DLL deve avere la specifica __stdcall e non __declspec come hai tu.
    Anche io tempo fa ho avuto il tuo stesso problema, ed ho dovuto scrivermi in C++ unu wrapper, cioè una DLL che faceva da tramite tra il programma in VB6 e la DLL che dovevo usare.
    La DLL scritta da me aveva quindi tutte le funzioni specificate come __stdcall e chiamava le funzioni della DLL originale.

    Sergio

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    18
    Quote Originariamente inviata da SirJo Visualizza il messaggio
    Mi sembra che per far interagire VB6 (o VBA) con le DLL scritte in C++, la DLL deve avere la specifica __stdcall e non __declspec come hai tu.
    Anche io tempo fa ho avuto il tuo stesso problema, ed ho dovuto scrivermi in C++ unu wrapper, cioè una DLL che faceva da tramite tra il programma in VB6 e la DLL che dovevo usare.
    La DLL scritta da me aveva quindi tutte le funzioni specificate come __stdcall e chiamava le funzioni della DLL originale.

    Sergio

    Era proprio quello il problema..

    Ora se richiamo la dll da Excel sul mio pc funziona tutto, se invece la richiamo da un altro pc mi dice che non trova il file.

    Il file si trova nella directory corretta ovviamente.

    Il problema secondo me è che la mia dll dipende da un altra dll (gsl, dll che calcola le radici di un polinomio) e su altri pc non riesce a risolvere le dipendenze.

    Qualcuno ha qualche idea su come posso utilizzare la mia dll su altri pc?

    Grazie

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.