2011-10-18 12 views
6

Ho una libreria composta da due parti: un insieme .net che è P/Invokes in una dll di terze parti nativa. In modalità desktop funziona perfettamente: tuttavia, quando fa riferimento all'assieme di un'app di Metro e lo esegue, genera uno System.DllNotFoundException su P/Invoke lamentandosi del fatto che "Impossibile caricare la libreria DLL": il modulo specificato non è stato trovato. "Come inviare P/Invoke ad una dll nativa dalla Metro?

La dll nativa non fa nulla di speciale ma crea solo connessioni TCP/IP in uscita verso un server. Il sistema non può saperlo, ma piuttosto la dll nativa potrebbe fare qualsiasi cosa. Questo è il motivo per cui sospetto che potrebbe non essere possibile farlo.

Qualche ordine di ricerca dll è menzionato su msdn per quanto riguarda le app in stile Metro, a suggerimento è possibile caricare dll nativi?

Inoltre ho trovato questo link on msdn parlando loading "librerie" e cita il PackageDependency nel file manifesto, ma per me non è ancora chiaro come aggiungere una dll nativa per il pacchetto in un modo che è possibile P/Invoke esso.

+0

Puoi provare a commentare la roba TCP/IP nella DLL e riprovare? Ciò distinguerà non trovando la DLL da non trovare le sue dipendenze. Inoltre, hai controllato su Funzionalità che vuoi utilizzare la connessione Internet in uscita? –

+0

Non ho creato la DLL. Non fa parte della soluzione. Quindi non posso cambiare il modo in cui è stata costruita la DLL. Buon punto che potrebbe essere una dipendenza secondaria che causa l'errore! Controlleremo appena possibile. – vidstige

+1

@vidstige Probabilmente hai già risolto questo problema, ma per il resto dai un'occhiata a [la mia risposta] (http://stackoverflow.com/a/12122750/650012) a una domanda correlata. –

risposta

0

Aggiungilo al progetto (fai clic con il tasto destro del mouse su progetto, Aggiungi, Elemento esistente.) Verifica che nelle proprietà di quell'elemento, Contenuto sia impostato su Vero (è falso per impostazione predefinita).

+0

Grazie per la risposta. Funziona in un normale ambiente C#, ma l'ho provato e non ho potuto farlo funzionare sul progetto Metro. – vidstige

+1

Descrivi "non funziona" - errore di compilazione? schermata verde misteriosa al momento del lancio? l'eccezione lanciata durante la corsa? –

+1

Ho aggiornato la domanda con uno specifico messaggio di errore! L'eccezione viene generata quando si chiama il metodo con l'attributo P/Invoke. – vidstige

0

Questo è probabilmente di progettazione. Il tuo problema potrebbe essere causato da un errore con il codice di errore 126 restituito da LoadLibrary. Se l'applicazione viene eseguita in modalità desktop, è necessario scegliere come target la modalità desktop per l'applicazione. È possibile utilizzare anche una versione precedente di Windows.

Problemi correlati