Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563

    C - DLL in VisualBasic

    Ho scritto una semplicissima DLL da usare in VB6...
    codice:
    #define DOWNLOAD_OK 0
    #define NO_DISK_SPACE 2
    #define ERROR_CONNECTION 1
    
    BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
    					 )
    {
        return TRUE;
    }
    
    extern "C" __declspec(dllexport) unsigned int __stdcall DettDownload(LPCSTR Url,LPCSTR SavePath)
    {
    	HRESULT t = URLDownloadToFile(NULL,Url,SavePath,0,NULL);
    		if (t == S_OK)
    			{
    				return DOWNLOAD_OK;	//Download eseguito
    			}
    		else
    			{
    				if (t == INET_E_CONNECTION_TIMEOUT)
    					return ERROR_CONNECTION;	//Impossibile connettersi
    				else
    					return NO_DISK_SPACE;	//Forse non c'è spazio sul disco fisso
    			}
    }
    Lasciamo stare il fatto che VisualBasic ha già funzioni per scaricare files,volevo giusto fare una prova e dunque ho creato una dichiarazione del genere...
    codice:
    Public Declare Function DettDownload Lib "Ceil.dll" (ByRef Url As String, ByRef SavePath As String) As Integer
    Ora volevo sapere, un char* in C equivale a una string di Vb6?
    Ad ogni modo quando uso la funzione,questa mi restituisce sempre e solo 2 (ossia NODISKSPACE), mentre se incollo la funzione in un semplice programma C e la uso, tutto è ok...
    Credo di aver sbagliato nella dichiarazione della funzione in VisualBasic, ma non capisco ancora dove...
    Grazie!
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Devi dichiarare le stringhe ByVal e il risultato e' un Long perche' l'int per il compilatore C a 32 bit e', appunto, a 32 bit

    Public Declare Function DettDownload Lib "Ceil.dll" (ByVal Url As String, ByVal SavePath As String) As Long

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    E perchè come byval?
    Io ho scelto byref perchè essendo un puntatore a char ho pensato che fosse automaticamente per riferimetno...
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Perche' in VB le stringhe sono delle strutture (BSTR) e quando si passa una stringa alle API viene gia' passato un puntatore a tale struttura. Quindi e' necessario che il puntatore venga passato per valore.

    Altrimenti, passeresti un puntatore al puntatore alla stringa, con ovvi risultati negativi.

    Se vuoi leggere un articolo che ti puo' aiutare, sebbene non sia recentissimo

    Utilizzare codice C/C++ con Visual Basic
    http://www.visual-basic.it/articoli/agVB_VC.htm

  5. #5
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Ah ecco grazie sei stato chiarissimo!!!
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

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.