Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    VB6 - lanciare una sub pubblica di un'applicazione esterna

    Salve a tutti.
    Ho 2 progetti vb6. Da uno di questi vorrei richiamare una sub pubblica che ho scritto in un form dell'altro progetto.
    Ho visto che ci sono delle api per catturare l'handle della form (FindWindows) però poi non so come usare questo handle per lanciare la sub.

    Qualcuno mi può aiutare?

    Ovviamento ho i sorgenti di entrambi i programmi. Sono io che ho scritto la sub dentro la form. Se ci sono soluzioni migliori per favore ditemelo pure.

    Grazie

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Non puoi richiamare nessuna routine, perchè una volta compilato i nomi vengono codificati in altro, quindi non sono più accessibili, ovviamente.

    In teoria, però non ho mai provato, potresti creare sul form un CommandButton ed attivarlo inviando la sequenza di messaggi WM_LBUTTONDOWN + WM_LBUTTONUP per simulare il click sul pulsante.

    Il CommandButton dovrebbe essere posizionato "fuori" dall'area del form così da non essere accessibile all'utente, impostando anche TabStop=False.

    Con la funzione API FindWindow() recuperi l'handle del CommandButton.

    Questo articolo dovrebbe fare al caso tuo:
    Come ottenere un handle di finestra senza specificare un titolo esatto
    http://support.microsoft.com/kb/147659



  3. #3
    Grazie mille.
    Ho provato e riesco a simulare il click del command button.
    Quindi da qui potrei richiamare la sub.
    Il problema è che devo passare un parametro di tipo long a questa sub. Come posso fare senza doverlo scrivere in qualche file o nel registro?

    Forse centra qualcosa
    [CODE]ByVal wParam As Long, ByRef lParam As Any[\CODE]
    nella dichiarazione di SendMessage?

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Come diceva gibra, se il programma che contiene la Sub da lanciare è un normale .exe, la cosa non è possibile. Il discorso sarebbe possibile se si trattasse di una DLL che espone la Sub come metodo.

    Si potrebbe però seguire una strada forse più semplice, visto che disponi di entrambi i sorgenti.
    Al programma che contiene la sub potresti far accettare dalla linea di comando un certo parametro (un altro, visto che hai già necessità di passargliene uno) che indica che la chiamata proviene dall'altro programma (tramite una semplice Shell). La presenza di questo parametro comanda l'esecuzione della Sub.

  5. #5
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da patapatty
    Grazie mille.
    Ho provato e riesco a simulare il click del command button.
    Quindi da qui potrei richiamare la sub.
    Il problema è che devo passare un parametro di tipo long a questa sub. Come posso fare senza doverlo scrivere in qualche file o nel registro?

    Forse centra qualcosa
    [CODE]ByVal wParam As Long, ByRef lParam As Any[\CODE]
    nella dichiarazione di SendMessage?
    Assolutamente no, non c'entra niente.
    Quelli sono i parametri per la funzione che hanno un significato specifico in base al tipo di messaggio.


    Devi spiegare lo scenraio in modo più dettagliato e definitivo.
    Non possiamo correrti dietro, se ogni post te ne vieni fuori con qualcosa che non avevi indato prima.

    Cosa devi passare come parametro, un valore che cambia oppure un valore prederminato?
    Se cambia, in base a cosa cambia?


  6. #6
    Utente di HTML.it L'avatar di alpynet
    Registrato dal
    Mar 2010
    Messaggi
    123
    Ciao, quando usavo vb6 mi ricordo che per fa comunicare due programmi fatti da me ho usato DDE (Dynamic Data Exchange), molto facile da implementare, anche se Microsoft consiglia di usare la tecnologia OLE.
    Vedi QUI

  7. #7
    Originariamente inviato da gibra
    Devi spiegare lo scenraio in modo più dettagliato e definitivo.
    Non possiamo correrti dietro, se ogni post te ne vieni fuori con qualcosa che non avevi indato prima.
    Mi spiace, ma sono veramente incasinata con questo problema e non ho nemmeno io le idee molto chiare. Il cliente vuole a tutti i costi questa cosa e io non so da dove iniziare. Quindi sto veramente facendo qualche prova un po' a caso, alla disperata. I dettagli mi vengono in mente strada facendo.

    Cosa devi passare come parametro, un valore che cambia oppure un valore prederminato?
    Se cambia, in base a cosa cambia?
    Devo passare un numero di tipo long che indica il valore chiave di un record che devo poi caricare da una tabella in sql.

    Spero non vengano fuori nuove esigenze...

  8. #8
    Originariamente inviato da Grumpy
    Si potrebbe però seguire una strada forse più semplice, visto che disponi di entrambi i sorgenti.
    Al programma che contiene la sub potresti far accettare dalla linea di comando un certo parametro (un altro, visto che hai già necessità di passargliene uno) che indica che la chiamata proviene dall'altro programma (tramite una semplice Shell). La presenza di questo parametro comanda l'esecuzione della Sub.
    Potresti spiegarmi la cosa un po' più nel dettaglio o anche rimandarmi a qualche esempio su internet? Te ne sarei grata.

    Ciao e grazie per l'interesse.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Originariamente inviato da patapatty
    Potresti spiegarmi la cosa un po' più nel dettaglio ...
    Devo fare qualche supposizione perché mancano alcune informazioni importanti.

    1) Il secondo programma (chiamiamolo B), quello che contiene la Sub, normalmente viene lanciato senza passargli alcun parametro nella command line.

    2) B, in qualche punto del suo codice, richiama la Sub passandogli un parametro.

    Se è così puoi, nel primo programma (chiamiamolo A) eseguire una Shell a B passandogli il valore long come parametro.
    B all'inizio testa se nella command line (funzione Command) c'è qualcosa: se c'è qualcosa esegue la Sub passandogli il valore trovato, altrimenti prosegue autonomamente.


    Viene però da domandarsi se questa Sub contenuta in B sia così grande/complessa/imperscrutabile da non poter essere estratta/isolata/riprodotta/replicata altrove.

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.