LabView 3.1: creare DLL in C con Dev-C + + e LabView chiamare
Ciao, vado a scrivere un semplice esempio di un modo semplice per creare DLL scoperto (Dynamic Link Libraries) in C e quindi in grado di chiamare in LabView, l'esempio è un pop di "Ciao mondo". Altro problema è per me per creare una DLL (perché l'unica cosa data è compilato direttamente a librerie di codice macchina fissa), per chiamare una funzione C in LabView, come questo è fatto facilmente con la Biblioteca Function Call Node VI.
Sulle National Instruments sono tre pagine su come effettuare una chiamata, creare un file C e costruire la DLL, ho fatto i primi due passi, ma il terzo necessario il programma Microsft Visual C + + 6.0 che ho, in modo da ancora da mettere in evidenza i passi da fare così, lascio la pagina qui nel frattempo.
Ma posso farvi creare regole per le proprie librerie e correre, ma spero che ti piace questo esempio per capire l'intera questione della DLL. Credo che ci sono tutorial su come fare DLL con Dev, in modo da non far finta che questo sia uno, anche perché non ho ancora letto neanche e quindi credo di avere problemi a compilare i propri codici. Intestazioni C. H. Def. Potete raccomandare qualche altro commento su un link per aiutare a creare DLL in C / C + + facilmente da qualsiasi programma e poi alcuni se LabView spiega molto meglio.
- Fase 1: Hai installato Dev-C + + e creare DLL
L'esempio che ho messo è la versione 4.9.9.2, è possibile vedere ciò che è disponibile qui .
Per creare un file DLL-> name-> Project
Scegli DLL, selezionare la lingua in C e mettere un nome, ad esempio HelloDll progetto. È necessario uscire dal progetto due file automaticamente dllmain.cy dll.h. Se selezionato per C + + queste due arichivos, ma senza l'esempio del Mondo Ciao.
. Archive C (non ho sostituito o la prima linea):
/ * Sostituire "dll.h" con il nome del vostro header * /
# Include "dll.h"
# Include <windows.h>
# Include stdio.h
Stdlib.hDllImport vuoto HelloWorld ()
{
MessageBox (0, "Ciao Mondo dalla DLL \ N", "Hi", MB_ICONINFORMATION);
}APIENTRY BOOL DllMain (HINSTANCE hInst / Library * handle di istanza. * /,
DWORD ragione / * La ragione di questa funzione viene chiamata. * /
Riservato LPVOID / * Non utilizzare. * /)
{
switch (ragione)
{
caso DLL_PROCESS_ATTACH:
break;DLL_PROCESS_DETACH caso:
break;DLL_THREAD_ATTACH caso:
break;caso DLL_THREAD_DETACH:
break;
}/ * Restituisce vero in caso di successo, FALSE in caso di fallimento * /
return true;
}
. Il H:
# Ifndef _DLL_H_
# Definisce _DLL_H_# Se BUILDING_DLL
# Definisce declspec __ DllImport (dllexport)
# Else / * Non BUILDING_DLL * /
# Definisce declspec __ DllImport (dllimport)
# Endif / * Non BUILDING_DLL * /DllImport vuoto HelloWorld (void);
# Endif / * _DLL_H_ * /
Questo è tutto, ora non c'è bisogno di scrivere nulla, basta andare a correre-> compile o Ctrl + F9 o le cudraditos colore dell'icona in alto a sinistra e abbiamo generato la DLL. Forse vi chiede di mantenere il progetto. Dev ei file generati. C. H, la DLL verrà salvato nella stessa cartella o se indicare il proprio nome e del progetto-> Opzioni progetto-> Costruzione è possibile modificarli.
- Passo 2: Creare il VI
Si prende un nuovo VI, andare allo schema a blocchi, e collocato nella Biblioteca Function Call Node VI, può essere trovato in conectivity-> eseguibili e librerie. E questo, è così facile, ma buona per il lavoro better'll RUN messo in una struttura in faccia se True, un pulsante di controllo booleano, e tutto all'interno di un loop ciclo che può essere controllato anche fermare con lo stesso pulsante.
- Fase 3: Biblioteca Node chiamata di funzione Fill
Viene somministrato due volte un set di pulsanti sesto o secondo:
- Nel Nome Libreria o Path è impostato il percorso della DLL
- A seconda del HelloWorld e lo scrivere (ma va male credo)
- Convenzioni di chiamata in C ci
- Vuoto parametro che abbiamo scritto (cioè non restituire nulla)
- Tipo void.
E questo è tutto, è sotto la forma della funzione void HelloWorld (void); Se non fosse una funzione di tipo VI rinviare nulla cambierebbe il modo in cui è possibile collegare gli ingressi o uscite.
E 'finita-run e fortuna.



















































Ciao
Le faccio le DLL con TurboExploer http://www.turboexplorer.com/ che è gratuito, ma pesa 200 mega. È inoltre possibile fare con le offerte libere del compilatore Borland (la 5.5).
Saluti!
thank you very much! Sono stato veramente utile.
Ciao che tale!
Voglio collegare una Canon Power Shot g9 cmaara e ottenere l'immagine attraverso una finestra di LabVIEW, a quanto pare ho bisogno di alcuni file dll per questo tipo di Interfacce .... Potete aiutarmi o darmi qualche consiglio.
Cesar Jimenez Calvillo.
Ciao Cesare.
La prima cosa che vedo è più facilmente la vostra fotocamera dovevano vederlo come un software webcam o la spina può essere visto in "Risorse del computer", come webcam, se così sicuro è possibile utilizzare il codice di avviamento postale? Labview Vision 0.5: il codice semplice fotocamera USB
e l'indice indica il nome della telecamera da selezionare.
In caso contrario, nessun software o non funziona il cavo USB (che collega certamente bene) cerca un driver generico che servirà come una webcam o un programma per importare le foto direttamente dalla fotocamera ... non so, il caso è che se si vede il video tramite il PC con certo che è elencato nella lista.
Non credo più facile da trovare (tanto meno) una dll che contiene una funzione che chiama la sequenza di immagini che funge da video. Se si trova, come sapete attraverso il nodo chiamata di funzione (per scoprire che tipo di dati, è necessario chiamare la funzione o indietro, se array, se il puntatore array, etc ... per definire la chiamata).
Nuova bella, come usare la biblioteca con la dev stesso con un lengauje co c + +
Beh, come ogni biblioteca, messo # include libreria (tra il triangolo e citazioni in base alla posizione del file se la cartella di default o meno) e già, chiamare la funzione nel programma.
Inoltre ho scoperto che mettendo solo il file. C di fronte alla funzione che vogliamo esportare, quando si definiscono le funzioni in un primo momento, la parola chiave __ declspec (dllexport) è già la funzione pubblica, poi dato al pulsante per creare un programma dll siamo utlizando per la compilazione. Questa parola chiave potrebbe essere leggermente diversa Credo che da un programma all'altro, ma Google è veloce.
Hey hey posso fare un costruttore programma e usarlo come si descrive in LabVIEW 6.1? Devo fare un programma in labview ma io lo trovo più complicato Sono abituato a utilizzare sempre il linguaggio C
Sarebbe di grande mi ha fatto apprezzare fuori questione!
Grazie in anticipo!
È possibile utilizzare qualsiasi programma per fare DLL, se si sa e cosa si può fare. Per dimostrare se ho messo le funzioni pubbliche come utilizzo il piccolo programma Dependecy Walker.
E se in Labview 6.1 può fare lo stesso per chiamare una dll, penso che cambia il modo di fare e il luogo a partire dalla versione 7, ma si ha la chiamata di funzione Node libray simili. Evita inoltre il nodo Interface Code (CIN), che serve anche per eseguire il codice, ma il fatto che, per quanto ho letto non ho enterder come funziona.
Si ricorda inoltre che è possibile utilizzare codice C o la lingua allo stesso modo rende strutturato struttura del nodo, ma non poteva mettere in qui include o chiamate di funzione ... e con il linguaggio MathScrpt Node matlab, ma per questo credo che abbiamo bisogno della LabView che include una completa ...
Beh qui è un manuale in lingua inglese di chiamare codice esterno in labview I 6.0 e 6.1, si usa il nodo come hai detto prima, ma in un più lungo, creando anche la dll fin dall'inizio ...
http://www.ni.com/pdf/manuals/370109a.pdf
Potrei spiegare un po 'meglio come posso passare da c + + linguaggio labview?
Passa passa non passa, è possibile aggiungere codice viene aggiunto.
- Se ci sono funzioni, o salti, o strutture qualcosa di strano solo se .. altra cosa .. per ... poi Formula Node.
- Se esistono funzioni e di un programma più elaborato crea una DLL e lo chiamano con Call Function Node libray (gli strumenti di supporto »Import» Shared libreria (DLL) viene in aiuto.).
Interface Node codice non so come si utilizza, ecco un esempio: Esempio di CIN con LabVIEW e MS Visual C + + 5.0 .
Codice esterna per LabVIEW - CIN / DLL - Punto di partenza
-. MathScript Node codice matlab mio ufficio, è necessario disporre di MATLAB.
- C Vuoi saperne di più? Credo che pasate a LabWindows CVI.
hi exite voleva sapere se la possibilità del contrario, a cui ho è che se posso ottenere quello che faccio in Labview per C. la mia domanda è che quello che faccio in Labview posso fare usando in un micro
Ora, la domanda che ho fatto diverse volte, ma quello che ho raccolto finora, seguendo la linea di FPGA è che io non credo.
Per pianificare un FPGA se tutto programma LabView e dato per compilare un file da convertire VHDL o uno che accetta la FPGA (facile come per l'NXT), ma è valida solo per 4 o 5 modelli e FPGA Il modulo costa un sacco di soldi. Credo che per la versione micro della ¿ARM? Non mi ricordo farà lo stesso.
Per quanto si può ottenere un valore booleano definita, cluster ... in C. cioè se si collega un cluster (ad esempio avere più cose e complicate) a un nodo Function Call Library (prima di tutto devi andare in e mettere nei parametri come tipo Type Adpat) vi darà il secondo pulsante per visualizzare le opzioni che hanno VI e si preme Crea file. c. Beh vi dico solo ottenere l'avvio con un file di intestazione. C per riempire il vostro intero codice.
Come sempre l'opzione di CVI LabView, ma questo è come programmare in C (non visiva) ed è chiamata LabVIEW dalle biblioteche ai pulsanti dell'interfaccia subVI.
Ciao,
Sono newbie in questioni DLL, ma mi chiedo se in termini di Matlab MEX file, ho capito sono simili alla DLL, posso usarli anche in LabVIEW. Cioè, ho un codice C q è complesso ed è stato usato in Matlab come file MEX, e lo uso in LabVIEW. No, se possibile, o se sarebbe meglio convertire tale codice in una DLL C con i metodi che avete proposto.
Per fino ad ora non aveva mai letto nulla sui file DLL come Matlab MEX chiamato. ma guardando NI.com con le parole chiave "MATLAB mex" mi ha lasciato il seguente:
* VI mex con NI LabVIEW Math Interface Toolkit Calling LabVIEW da The MathWorks Inc. MATLAB ® ambiente software
* Qui credo che fa connessione tra Simulink e LabVIEW NI LabVIEW Simulation Interface Toolkit
Per utilizzare il mex in LabView non ha lasciato niente di così velocemente e non sono mai andato a leggere per il collegamento con le librerie LabView, ma ovviamente non ero mai andato diversamente, o dalle normali file di AutoCAD ... Quindi, se è possibile compilare il C qualsiasi programma e fare Dll è una soluzione.
*
[...]
Buon periodo successivo che riesce a creare la dll da richiamare in labview non importa quale compilatore si usa, si apre un mondo di possibilità, ma anche vedere un mondo di guai, soprattutto quando ciò che facciamo è più di "ciao mondo". Ho lavorato duramente per utilizzare dll viene compilato dal artificiali neurunales librerie di rete per l'utilizzo in LabVIEW.
Primo problema, i tipi di dati, quando è necessario l'librerie dll passati come parametri tipi di dati complessi come strutture di grandi dimensioni c + +, il compito è un po 'doloroso per affrontare un po' con questi ostacoli, creare funzioni di collegamento in c + + che in grado di gestire strutture dati c + + e labview renderli più commestibile.
Secondo problema, la gestione della memoria, a volte, soprattutto quando si avvia la programmazione, si tende a pensare "se hai compilato è perché questo bene", ma se si crea un loop in LabVIEW in cui una funzione viene richiamata migliaia di volte al secondo , ospitato in una dll, e se tale funzione non fa un uso corretto della memoria si può semplicemente restituire il sistema instabile. E 'così dopo essere stato felice di vedere come l'RNA ha funzionato perfettamente, sono caduto in pochi secondi decepcioncuando visto tutto e si fermò, come il computer è diventato lento. Ho controllato tutto il codice C + +, distruttori, costruttori, i cosiddetti new e delete, ma non ha rilevato problemi.
Sono d'accordo con te, la verità come non ottiene i dati da una dll in LabView, se si passa con la dimensione, con l'obiettivo di qualcos'altro ... rende improvvisamente il crack LabVIEW e si chiude improvvisamente. E lentamente chiaro, almeno in 8.6.1.