2010-02-05 13 views
7

Sto scrivendo una DLL per collegarla a un'altra applicazione (di terze parti). La DLL dovrà dipendere da un altro insieme di DLL (per ragioni di licenza non posso collegare staticamente).DLL plugin che dipendono da altre DLL

Vorrei che la mia DLL fosse "xcopy-deployable" in qualsiasi directory. Vorrei anche non aver bisogno di aggiungere questa directory al percorso.

Se si crea la DLL nel modo consueto, Windows rifiuterà di caricare la DLL, poiché non riesce a trovare le DLL accanto al processo corrente.

Esistono buone opzioni per aiutare Windows a individuare la DLL?


rispondere ad alcune domande:

  • La DLL è scritto in C++.
  • Le DLL aggiuntive sono QT-dll.
  • Vorrei collocare le DLL aggiuntive nella stessa cartella della mia DLL di plugin. Posso ottenere il nome di quella cartella da GetModuleFileName.
  • L'applicazione è Firefox, la DLL è un modulo di sicurezza PKCS # 11.
  • L'applicazione carica la DLL utilizzando il percorso completo della DLL (l'utente lo fornisce durante l'installazione del plug-in).
  • La richiesta di collocare le DLL in System32 o accanto all'applicazione potrebbe funzionare, ma è un po 'caotica e potrebbe causare problemi con i programmi di disinstallazione.
  • LoadLibrary e GetProcAddress funzionerebbero, ma nel mio caso non è fattibile. Sto usando centinaia, se non migliaia, di metodi nelle altre DLL. Ho davvero bisogno di usare le librerie di importazione.

Avevo pensato di utilizzare le DLL caricate in ritardo combinate con SetDllDirectory in DllMain. Qualcuno ha provato qualcosa di simile?

+1

Che tecnologia stai usando? .netto? –

+0

La tua premessa non ha senso ed è infranta. –

+0

Si può sempre inserire le DLL nella cartella System32 ... – Kryten

risposta

4

Posso pensare a 3 modi.

  1. messo le DLL nella stessa cartella dell'applicazione (non si può fare questo?)
  2. Usa collegamento runtime. LoadLibrary() e GetProcAddress()
  3. utilizzare un manifesto http://msdn.microsoft.com/en-us/library/aa374182(VS.85).aspx

Ma se la dll non si trova nella stessa cartella del file exe, come hai intenzione di sapere dove si trova? dimentica che Windows non sa, come fa tu sai?

+0

Non è un'applicazione "mia" e non mi piace molto l'installazione nella cartella delle "altre" applicazioni. La soluzione manifest sembra davvero interessante - ci penserò su. Hai altri riferimenti? –

1

è possibile specificare il percorso di dll come parametro di LoadLibrary().

0

Un'altra opzione è modificare la variabile PATH. Avere un file batch per avviare l'app principale e impostare PATH =% PATH%;% ~ dp0. Ciò garantisce un ingombro minimo, senza lasciare tracce aggiuntive nel sistema dopo l'esecuzione.

Problemi correlati