Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [C#] Gestione DLL
Forum - C# / VB.NET - [C#] Gestione DLL

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
fosforo (Normal User)
Expert


Messaggi: 346
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 9:48
Domenica, 08/11/2020
Ciao

Uso una DLL per analizzare i metadati dei file audio nella mia collezione.
Dato che i file sono tanti ho creato un ciclo For Next che per ogni file lancia la DLL.
Chiaramente dovrei fare l'analisi un file alla volta.
Come posso capire che la DDL ha finito e continuare il ciclo For Next?

Grazie anticipatamente

PM Quote
Avatar
fosforo (Normal User)
Expert


Messaggi: 346
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 19:02
Domenica, 08/11/2020
Testo quotato

Postato originariamente da fosforo:

Ciao

Uso una DLL per analizzare i metadati dei file audio nella mia collezione.
Dato che i file sono tanti ho creato un ciclo For Next che per ogni file lancia la DLL.
Chiaramente dovrei fare l'analisi un file alla volta.
Come posso capire che la DDL ha finito e continuare il ciclo For Next?

Questo è il codice:

using MediaInfoLib;

for (int i = 0; i < dataGridView1.Rows.Count; i++)
MI.Open(pathMTX + dataGridView1.Rows.Cells[0].Value.ToString() + ".mp3");
textBox1.Text = MI.Inform();


Grazie anticipatamente


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6108
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:07
Domenica, 08/11/2020
Non vedo il problema... chiudi il file e tratta il prossimo. Non hai molto da fare.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
fosforo (Normal User)
Expert


Messaggi: 346
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 9:49
Lunedì, 09/11/2020
Ciao Nessuno

Innanzitutto grazie per l'aiuto.
Purtroppo non sono cosi avanti.
Non capisco cosa significa chiudi il file.

Il mio problema è che la DLL ci mette un certo tempo ad analizzare un file e nel frattempo
il ciclo For Next continua a lanciare i processi di analisi.
Dopo un pò il programma si blocca.

Pensavo ad un meccanismo che controlla lo stato della analisi e, se finita, passa al file successivo mettendo in pausa il ciclo For Next.

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 767
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 11:41
Lunedì, 09/11/2020
Non conosco MediaInfoLib e come opera, qui ci sono degli esempi d'uso:
https://csharp.hotexamples.com/examples/MediaInfoLib/MediaI ...

Che tipo di metadati ti occorrono?
In win10 c'è Shell32.dll, che restituisce questi parametri contenuti in un file multimediale:
Codice sorgente - presumibilmente C# / VB.NET

  1. 0: Nome
  2. 1: Dimensione
  3. 2: Tipo elemento
  4. 3: Ultima modifica
  5. 4: Data creazione
  6. 5: Data ultimo accesso
  7. 6: Attributi
  8. 7: Stato offline
  9. 8: Disponibilità
  10. 9: Tipo percepito
  11. 10: Proprietario
  12. 11: Tipologia
  13. 12: Data acquisizione
  14. 13: Artisti partecipanti
  15. 14: Album
  16. 15: Anno
  17. 16: Genere
  18. 17: Conduttori
  19. 18: Tag
  20. 19: Classificazione
  21. 20: Autori
  22. 21: Titolo
  23. 22: Oggetto
  24. 23: Categorie
  25. 24: Commenti
  26. 25: Copyright
  27. 26: #
  28. 27: Durata
  29. 28: Velocità in bit
  30. 29: Protetto
  31. 30: Modello fotocamera
  32. 31: Dimensioni
  33. 32: Produttore fotocamera
  34. 33: Società
  35. 34: Descrizione del file
  36. 35: Master parole chiave
  37. 36: Master parole chiave
  38. 37:
  39. 38:
  40. 39:
  41. 40:
  42. 41:
  43. 42: Nome programma
  44. 43: Durata calendario
  45. 44: È online
  46. 45: È ricorrente
  47. 46: Ubicazione
  48. 47: Indirizzi partecipanti facoltativi
  49. 48: Partecipanti facoltativi
  50. 49: Indirizzo organizzatore
  51. 50: Nome organizzatore
  52. 51: Ora promemoria
  53. 52: Indirizzi partecipanti obbligatori
  54. 53: Partecipanti necessari
  55. 54: Risorse
  56. 55: Stato riunione
  57. 56: Stato disponibilità
  58. 57: Dimensioni totali
  59. 58: Nome account
  60. 59:
  61. 60: Stato attività
  62. 61: Computer
  63. 62: Anniversario
  64. 63: Nome assistente
  65. 64: Telefono assistente
  66. 65: Compleanno
  67. 66: Indirizzo (ufficio)
  68. 67: Città (uff.)
  69. 68: Paese/area geografica (uff.)
  70. 69: Casella postale (uff.)
  71. 70: CAP (uff.)
  72. 71: Provincia o stato società
  73. 72: Via (uff.)
  74. 73: Fax (uff.)
  75. 74: Home page società
  76. 75: Telefono (uff.)
  77. 76: Numero richiamata automatica
  78. 77: Telefono automobile
  79. 78: Figli
  80. 79: Telefono principale società
  81. 80: Reparto
  82. 81: Indirizzo di posta elettronica
  83. 82: Posta el. 2
  84. 83: Posta el. 3
  85. 84: Elenco posta elettronica
  86. 85: Nome visualizzato posta elettronica
  87. 86: Archivia come
  88. 87: Nome
  89. 88: Nome e cognome
  90. 89: Sesso
  91. 90: Nome
  92. 91: Hobby
  93. 92: Indirizzo (abitazione)
  94. 93: Città (ab.)
  95. 94: Paese/area geografica (ab.)
  96. 95: Casella postale (ab.)
  97. 96: CAP (ab.)
  98. 97: Provincia (ab.)
  99. 98: Via (ab.)
  100. 99: Fax abitazione
  101. 100: Telefono (ab.)
  102. 101: Indirizzi IM
  103. 102: Iniziali
  104. 103: Posizione
  105. 104: Etichetta
  106. 105: Cognome
  107. 106: Indirizzo postale
  108. 107: Secondo nome
  109. 108: Numero di cellulare
  110. 109: Alternativo
  111. 110: Ufficio
  112. 111: Altri indirizzi
  113. 112: Altra città
  114. 113: Altro paese o altra area geografica
  115. 114: Altra casella postale
  116. 115: Altro CAP
  117. 116: Altra provincia
  118. 117: Altra via
  119. 118: Cercapersone
  120. 119: Titolo personale
  121. 120: Città
  122. 121: Paese/area geografica
  123. 122: Casella postale
  124. 123: CAP
  125. 124: Provincia
  126. 125: Indirizzo
  127. 126: Posta elettronica primaria
  128. 127: Telefono principale
  129. 128: Professione
  130. 129: Coniuge/Partner
  131. 130: Suffisso
  132. 131: Telefono TTY/TTD
  133. 132: Telex
  134. 133: Pagina Web
  135. 134: Stato contenuto
  136. 135: Tipo contenuto
  137. 136: Data trasferimento
  138. 137: Data di archiviazione
  139. 138: Terminato il
  140. 139: Categoria dispositivo
  141. 140: Connesso
  142. 141: Metodo individuazione
  143. 142: Nome descrittivo
  144. 143: Computer locale
  145. 144: Produttore
  146. 145: Modello
  147. 146: Associato
  148. 147: Classificazione
  149. 148: Stato
  150. 149: Stato
  151. 150: ID client
  152. 151: Collaboratori
  153. 152: Creazione contenuto
  154. 153: Data ultima stampa
  155. 154: Data ultimo salvataggio
  156. 155: Dipartimento
  157. 156: ID documento
  158. 157: Pagine
  159. 158: Diapositive
  160. 159: Tempo totale di modifica
  161. 160: Numero parole
  162. 161: Scadenza
  163. 162: Data di fine
  164. 163: Numero file
  165. 164: Estensione file
  166. 165: Nome file
  167. 166: Versione file
  168. 167: Colore contrassegno
  169. 168: Stato contrassegno
  170. 169: Spazio libero
  171. 170:
  172. 171:
  173. 172: Gruppo
  174. 173: Tipo di condivisione
  175. 174: Profondità in bit
  176. 175: Risoluzione orizzontale
  177. 176: Larghezza
  178. 177: Risoluzione verticale
  179. 178: Altezza
  180. 179: Priorità messaggio
  181. 180: È un allegato
  182. 181: È stato eliminato
  183. 182: Stato di crittografia
  184. 183: Con contrassegno
  185. 184: Completato
  186. 185: Incompleto
  187. 186: Stato lettura
  188. 187: Condiviso
  189. 188: Creatori
  190. 189: Data
  191. 190: Nome cartella
  192. 191: Percorso cartella
  193. 192: Cartella
  194. 193: Partecipanti
  195. 194: Percorso
  196. 195: Per percorso
  197. 196: Tipo
  198. 197: Nomi contatti
  199. 198: Tipo voce
  200. 199: Lingua
  201. 200: Data visita
  202. 201: Descrizione
  203. 202: Stato collegamento
  204. 203: Destinazione collegamento
  205. 204: URL
  206. 205:
  207. 206:
  208. 207:
  209. 208: Elemento multimediale creato
  210. 209: Data di rilascio
  211. 210: Autore codifica
  212. 211: Numero episodio
  213. 212: Produttori
  214. 213: Editore
  215. 214: Numero stagione
  216. 215: Sottotitolo
  217. 216: URL Web utente
  218. 217: Scrittori
  219. 218:
  220. 219: Allegati
  221. 220: Indirizzi Ccn
  222. 221: Ccn
  223. 222: Indirizzi Cc
  224. 223: Cc
  225. 224: ID conversazione
  226. 225: Data di ricezione
  227. 226: Data di invio
  228. 227: Indirizzi origine
  229. 228: Da
  230. 229: Con allegati
  231. 230: Indirizzo mittente
  232. 231: Mittente
  233. 232: Archivio
  234. 233: Indirizzi destinatari
  235. 234: Titolo azione
  236. 235: A
  237. 236: Mileage
  238. 237: Artista album
  239. 238: Criterio di ordinamento artista album
  240. 239: ID album
  241. 240: Criterio di ordinamento album
  242. 241: Criterio di ordinamento artisti partecipanti
  243. 242: Battute al minuto
  244. 243: Compositori
  245. 244: Criterio di ordinamento compositore
  246. 245: Disco
  247. 246: Chiave iniziale
  248. 247: Parte di una compilation
  249. 248: Umore
  250. 249: Serie
  251. 250: Punto
  252. 251: Colore
  253. 252: Classificazione per minori
  254. 253: Motivo classificazione per minori
  255. 254: Spazio utilizzato
  256. 255: Versione EXIF
  257. 256: Evento
  258. 257: Esposizione
  259. 258: Programma Esposizione
  260. 259: Tempo di esposizione
  261. 260: F-stop
  262. 261: Modalità flash
  263. 262: Distanza focale
  264. 263: lunghezza focale 35 mm
  265. 264: Sensibilità ISO
  266. 265: Produttore lenti
  267. 266: Modello lenti
  268. 267: Sorgente luminosa
  269. 268: Massima apertura
  270. 269: Modalità regolazione
  271. 270: Orientamento
  272. 271: Persone
  273. 272: Modalità programma
  274. 273: Saturazione
  275. 274: Distanza del soggetto
  276. 275: Bilanciam. bianco
  277. 276: Priorità
  278. 277: Progetto
  279. 278: Numero canale
  280. 279: Titolo puntata
  281. 280: Sottotitoli codificati
  282. 281: Riesegui
  283. 282: SAP
  284. 283: Data trasmissione
  285. 284: Descrizione programma
  286. 285: Tempo registrazione
  287. 286: Call sign stazione
  288. 287: Nome stazione
  289. 288: Riepilogo
  290. 289: Frammenti
  291. 290: Riepilogo automatico
  292. 291: Pertinenza
  293. 292: Proprietà del file
  294. 293: Precisione
  295. 294: Condiviso con
  296. 295: Stato condivisione
  297. 296:
  298. 297: Nome prodotto
  299. 298: Versione
  300. 299: Collegamento di supporto
  301. 300: Origine
  302. 301: Data di inizio
  303. 302: Condivisione
  304. 303: Stato di disponibilità
  305. 304: Stato
  306. 305: Informazioni di pagamento
  307. 306: Completata
  308. 307: Proprietario attività
  309. 308: Criterio di ordinamento titolo
  310. 309: Dimensioni file totale
  311. 310: Marchi depositati
  312. 311: Compressione video
  313. 312: Amministrazione
  314. 313: Velocità dati
  315. 314: Altezza fotogramma
  316. 315: Frequenza dei fotogrammi
  317. 316: Larghezza fotogramma
  318. 317: Sferico
  319. 318: Stereo
  320. 319: Orientamento video
  321. 320: Velocità in bit complessiva


se l'interrogazione la metti in un ciclo for, il programma non va avanti finquando non ha restituito i parametri.
Shell32 l'ho usata qualche volta in VB.Net, se ritieni che ti può essere utile, nessun problema a postarti un esempio in C#


in programmazione tutto è permesso
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6108
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 12:21
Lunedì, 09/11/2020
Testo quotato

Postato originariamente da fosforo:

Ciao Nessuno

Innanzitutto grazie per l'aiuto.
Purtroppo non sono cosi avanti.
Non capisco cosa significa chiudi il file.

Il mio problema è che la DLL ci mette un certo tempo ad analizzare un file e nel frattempo
il ciclo For Next continua a lanciare i processi di analisi.
Dopo un pò il programma si blocca.

Pensavo ad un meccanismo che controlla lo stato della analisi e, se finita, passa al file successivo mettendo in pausa il ciclo For Next.



Non ci siamo capiti.

Se hai usato la MI.Open ci sarà anche una MI.Close o qualcosa del genere.
Tutto il codice deve stare nella for ma non si capisce cosa hai inserito nella for perché non hai usato i tag CODE




Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 767
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 17:03
Lunedì, 09/11/2020
@ fosforo
Ho caricato un progetto che mostra l'uso di Shell32.dll:
http://www.pierotofy.it/pages/sorgenti/dettagli/19629-INFO ...


in programmazione tutto è permesso
PM Quote
Avatar
fosforo (Normal User)
Expert


Messaggi: 346
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 18:47
Lunedì, 09/11/2020
Nessuno ha ragione ma posto solo il codice necessario per non tediare.

for (int i = 0; i < dataGridView1.Rows.Count; i++)
            { lblProcessed.Text = "Processing: " + dataGridView1.Rows.Cells[0].Value.ToString();
                progressBar1.Value = i + 1;
                dataGridView1.Rows.Selected = true;
                Media_Info Minfo = new Media_Info(pathMTX, dataGridView1.Rows.Cells[0].Value.ToString());
                textBox1.Text = Minfo._RetMediaInfo;
                this.Refresh();}

public Media_Info( string pathMTX, string FileName)
        {           if (MI.Open(pathMTX + FileName + ".mp3") > 0)
            { RetMediaInfo = MI.Inform();}
            MI.Close();
        }
        public string _RetMediaInfo
        {get { return RetMediaInfo; }
        }

Ecco l'errore che mi restituisce dopo poche analisi:

Assistente al debug gestito 'ContextSwitchDeadlock' : 'CLR non è riuscito a passare dal contesto COM 0xff2c48 al contesto COM 0xff2b90 per 60 secondi. Probabilmente il thread a cui appartiene il contesto/apartment di destinazione è impegnato nell'attesa senza distribuzione o nell'elaborazione di un'operazione a esecuzione prolungata che non prevede la distribuzione di messaggi Windows. Questa situazione in genere ha un impatto negativo sulle prestazioni e può causare una mancata risposta dall'applicazione o un accumulo continuato nel tempo dell'utilizzo della memoria. Per evitare questo problema, è necessario che durante le operazioni a esecuzione prolungata tutti i thread di tipo apartment a thread singolo usino primitive di attesa con distribuzione (ad esempio CoWaitForMultipleHandles) e messaggi distribuiti in base a routine.'


Carlo grazie per l'indicazione, molto interessante, non sapevo neanche esistesse.
La proverò per vedere se riesce a leggere i file tipo DSD, FLAC and ALAC etc etc.

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 767
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 15:05
Martedì, 10/11/2020
Testo quotato

Postato originariamente da fosforo:
Carlo grazie per l'indicazione, molto interessante, non sapevo neanche esistesse.
La proverò per vedere se riesce a leggere i file tipo DSD, FLAC and ALAC etc etc.


Shell32.dll legge i metadati standard di qualsiasi file, ho dei FLAC e DSD, e Shell32.dll restituisce correttamente le info: autore, anno, genere, album, tipo ecc ecc., se analizzi i files di una macchina fotografica restituisce anche diaframma, iso, profilo colore, tempo di scatto, compressione, nome della macchina fotografica ecc ecc.
Shell32.dll è parte integrante di Win, non devi installare nulla.
Ci sarebbe un problema solo se esistessero dei metadati di tipo esteso non supportati da Shell32.dll, ma leggibili da MediaInfoLib.

Ultima modifica effettuata da Carlo il 10/11/2020 alle 16:43


in programmazione tutto è permesso
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo