Domanda

Ho fatto Guida di About.com per incorporare le dll in Delphi EXE's che sembra funzionare, purché non utilizzi effettivamente la DLL come funzione esterna. Esiste comunque un modo per far funzionare il codice a cui mi sono collegato prima di un'unità a cui fa riferimento la clausola use.
Ho provato:

  • Fare esattamente ciò che dice questo codice.
  • Inserendo questo codice nella sezione di inizializzazione del modulo che utilizza l'unità che utilizza le funzioni esterne.
  • Inserendo questo codice nella sezione di inizializzazione dell'unità che utilizza le funzioni esterne.

E per funzioni esterne mi riferisco a una funzione che assomiglia a:

function MyFunction: Integer; stdcall; external 'fundll.dll';

Il problema che sto riscontrando è che non è possibile caricare il solito "fundll.dll" (perché non si trova nella directory). Il codice di Zarko funziona (piuttosto dolce, crea la dll in quella cartella) quando il codice arriva così lontano. Ma si arresta in modo anomalo prima ancora che il progetto inizi a funzionare quando sto usando le funzioni esterne di cui ho bisogno.

È stato utile?

Soluzione

se vuoi chiamare una funzione in essa, hai due possibilità ...

1) usa un bundler exe / dll invece del metodo della risorsa. 2) non collegare alla libreria con la dichiarazione di stile esterna. utilizzare invece LoadLibrary, GetProcAddress, ecc. per fare riferimento alla funzione che è necessario chiamare.

il metodo della risorsa e la dichiarazione della funzione come esterna non si mescolano. windows vuole collegare il tuo exe alla dll in memoria prima il tuo codice viene eseguito per estrarre la dll.

Altri suggerimenti

Non puoi farlo con funzioni esterne: usa LoadLibrary () e GetProcAddress () invece dopo aver estratto la DLL e tutto dovrebbe funzionare.

Il motivo è che qualsiasi codice verrà eseguito solo dopo che tutti i punti di ingresso sono stati risolti dal caricatore del sistema operativo. Un po 'di problemi con pollo e uova, se vuoi.

Se si intende utilizzare LoadLibrary () e GetProcAddress (), è preferibile utilizzare BTMemoryModule, che consentirebbe di utilizzare la DLL incorporata come risorsa senza salvarla nel filesystem (che l'utente potrebbe non essere in grado da fare, a seconda della sicurezza della macchina).

http://www.jasontpenny.com/blog/2009/05/01/using-dlls-stored-as-resources-in-delphi-programs/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top