Ho una DLL nativa che è un plug-in per un'applicazione diversa (una che ho essenzialmente il controllo a zero). Tutto funziona perfettamente finché non collego con un file .lib aggiuntivo (collega la mia DLL a un'altra DLL denominata). Questo file contiene alcune API aggiuntive dall'applicazione padre che vorrei utilizzare. Non ho nemmeno scritto alcun codice per utilizzare nessuna delle funzioni esportate, ma solo il collegamento in questa nuova DLL sta causando problemi. In particolare, viene visualizzato il seguente errore quando si tenta di eseguire il programma:Problemi di importazione DLL Win32 (DllMain)
L'applicazione non è stata inizializzata correttamente (0xc0000025). Fare clic su OK per terminare l'applicazione.
Credo di aver letto da qualche parte che questo è in genere dovuto a una funzione DllMain che restituisce FALSE. Inoltre, il seguente messaggio viene scritto sullo standard output:
ERRORE: allocazione della memoria tentato prima dell'inizializzazione componente
Io sono quasi al 100% sicuro che questo messaggio di errore sta venendo dall'applicazione e non è un certo tipo di Errore di Windows.
Guardando in questo un po 'di più (aka agitando intorno e lanciando ogni interruttore io sappia) ho collegato con/MAP acceso e ha trovato questo nel file .map risultante:
0001:000af220 [email protected]@Z 00000001800b0220 f ABQSMABasCoreUtils_import:ABQSMABasCoreUtils.dll
0001:000af226 [email protected][email protected] 00000001800b0226 f ABQSMABasCoreUtils_import:ABQSMABasCoreUtils.dll
0001:000af22c [email protected][email protected] 00000001800b022c f ABQSMABasCoreUtils_import:ABQSMABasCoreUtils.dll
0001:000af232 [email protected]@Z 00000001800b0232 f ABQSMABasCoreUtils_import:ABQSMABasCoreUtils.dll
Se undecorate quelli nomi utilizzando "undname" danno la seguente (stesso ordine):
void __cdecl operator delete(void * __ptr64)
void * __ptr64 __cdecl operator new(unsigned __int64)
void * __ptr64 __cdecl operator new[](unsigned __int64)
void __cdecl operator delete[](void * __ptr64)
io non sono sicuro di aver capito come qualsiasi cosa, da ABQSMABasCoreUtils.dll
può esistere all'interno di questo file .map o perché la mia DLL è anche il tentativo di caricare ABQSMABasCoreUtils.dll se non ho alcun codice che referenzia es questa DLL. Qualcuno può aiutarmi a mettere insieme queste informazioni e scoprire perché questo non funziona? Per quello che vale ho confermato tramite "dumpbin" che l'applicazione genitore importa , quindi viene caricato indipendentemente. Ho anche provato a caricare in ritardo questa DLL nella mia DLL, ma questo non ha modificato i risultati.
EDIT
Ho ricontrollato e tutti i file coinvolti sono 64 bit.
Hai provato a utilizzare 'LoadLibrary' invece del collegamento statico della libreria di importazione? Se lo fai, l'applicazione principale è già inizializzata e hai così qualche vantaggio. – Oleg
Ci ho pensato, ma finirò per utilizzare una grande quantità di funzioni da questa libreria. Non dovrò usare GetProcAddress per ognuno? Preferirei evitarlo, se possibile. – brady
C0000025 = STATUS_NONCONTINUABLE_EXCEPTION. Prova a eseguire l'applicazione in windbg e vedere dove si blocca; forse questo ti darà un suggerimento. – Luke