2011-08-16 10 views
34

Sto costruendo un progetto con OpenCV in C#. Richiede un file dll chiamato cvextern.dll. ma, quando si aggiunge questo file come riferimento, viene visualizzato questo messaggio: -Voglio una soluzione per questo: assicurati che il file sia accessibile e che sia un assembly valido o un componente COM

non è possibile aggiungere un riferimento "cvextern.dll", assicurarsi che il file sia accessibile e che sia un assembly valido o COM componente.

Mi stanco dalla ricerca, ho passato gli ultimi 2 giorni nella ricerca di una soluzione per questo problema

+1

È stato convalidato se il file è "accessibile" poiché dispone di tutte le autorizzazioni (accesso di lettura/esecuzione) per utente specifico. Inoltre se hai scaricato da internet potresti aver bisogno di "sbloccarlo". – YetAnotherUser

+1

il file è una DLL nativa che significa che non è possibile aggiungerlo a un progetto .NET tramite Aggiungi riferimento ... è possibile utilizzare tramite DllImport (consultare http://msdn.microsoft.com/en-us/library/system .runtime.interopservices.dllimportattribute.aspx) – Yahia

+0

Possibile duplicato di [Non è stato possibile aggiungere un riferimento alla DLL] (https://stackoverflow.com/questions/3456758/a-reference-to-the-dll-could-not -be-added) – STF

risposta

18

il file è una DLL nativa che significa che non è possibile aggiungere a un progetto .NET tramite add Riferimento ... è possibile utilizzarlo tramite DllImport (vedere http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.aspx)

+0

il tutorial non assomiglia alla realtà .. La versione di Visual Studio influisce? Sto usando microsoft Visual Studio 2008 Express Edition .. :) –

+3

AFAIK non è davvero importante ... anche se la DLL deve essere nella directory del progetto o "accessibile globalmente" (come system32 ...) – Yahia

+1

Ma come si esegue il debug di chiamate a tale dll esterna se non è possibile aggiungere un riferimento ad esso nel progetto? –

3

Assicurarsi che le DLL necessarie vengano esportate (o copiate manualmente) nella cartella bin durante la creazione dell'applicazione.

+2

Sì, poiché non è stato possibile aggiungerlo come riferimento, ma è necessaria un'altra DLL. Semplicemente la copia al momento della compilazione ha funzionato. – Binarian

8

Di seguito ha lavorato per me:

risposta breve

eseguire la seguente tramite riga di comando (cmd):

TlbImp.exe cvextern.dll  //where cvextern.dll is your dll you want to fix. 

E una DLL valida verrà creato per voi.

Longer risposta

  • Apri cmd

  • Trova TlbImp.exe. Probabilmente si trova in C: \ Programmi (x86) \ Microsoft SDK \ Windows \ v7.0A \ Bin. Se non riesci a trovare andare alla cartella principale (C: \ o D :) ed eseguire:

    dir tlbimp.exe /s    //this will locate the file. 
    
  • Run tlbimp.exe e mettere la DLL dietro di esso. Esempio: se la tua dll è cvextern.dll. È possibile eseguire:

    TlbImp.exe cvextern.dll 
    
  • Una nuova DLL è stata creata nella cartella di tlbimp.exe. Puoi usarlo come riferimento nel tuo progetto.
+0

Ha funzionato come un fascino! Assicurati di utilizzare cmd con i diritti di amministratore. – Christian

+0

no tale exe win 8.1 64bit – MonsterMMORPG

+3

'tipo di input non valido libreria di tipi' ha ottenuto questo errore durante l'esecuzione da Prompt dei comandi di Visual Studio –

16

Nel mio caso ho dovuto registrare la DLL -> cmd aperta (console) con diritti di amministratore e digitare: regsvr32 "foo.dll"

+0

Questa è la risposta che probabilmente il 95% di questo errore può essere risolto facendo questo cmd -> "regsvr32" C: \ blah \ foo.dll "' – SSpoke

1

ho avuto lo stesso programma, spero che questo potrebbe aiutare.

Se si utilizza Windows 7, aprire Prompt dei comandi-> eseguire come amministratore. registra il tuo < ...>. dll.

Perché eseguire come amministratore, è possibile registrare il tuo < ...>. Dll utilizzando l'esecuzione all'avvio di Windows, ma ancora la tua DLL esegue solo come utente anche il tuo account è amministratore.

Ora è possibile aggiungere il proprio < ...>.dll in Progetto-> Aggiungi Reference> Sfoglia

Grazie

1

Sguardo here per la risposta da parte TheMattster. L'ho implementato e ha funzionato come un fascino. In poche parole, la sua soluzione suggerisce di aggiungere la DLL COM come una risorsa al progetto (quindi ora compila nella dll del progetto), e al primo avvio scriverlo in un file (cioè il file dll che volevo lì nel primo posto).

Il mio problema era che non solo dovevo usare la DLL COM nel mio progetto, dovevo anche distribuirlo con la mia app usando ClickOnce, e senza poter aggiungere riferimenti nel mio progetto la soluzione di cui sopra è praticamente l'unico che ha funzionato.

0

'E' necessario un file dll chiamato cvextern.dll. 'E' può essere il tuo file cs o qualche altra dll di terze parti che stai usando nel tuo progetto.

Per chiamare dll native nel proprio file cs, copiare la DLL nella directory root \ lib del progetto e aggiungerla come elemento esistente. (Aggiungi elemento esistente) e utilizza Dllimport con la posizione corretta.

Per terze parti, copiare la libreria nativa nella cartella in cui si trova la libreria di terze parti e aggiungerla come elemento esistente.

Dopo la costruzione, assicurarsi che le dll richieste siano visualizzate nella cartella Build. In alcuni casi potrebbe non apparire o essere sostituito nella cartella Build. Elimina manualmente la cartella Build e crea di nuovo.

Problemi correlati