Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
ASUS Expertbook PM3: il notebook robusto per le aziende
ASUS Expertbook PM3: il notebook robusto per le aziende
Pensato per le necessità del pubblico d'azienda, ASUS Expertbook PM3 abbina uno chassis particolrmente robusto ad un pannello da 16 pollici di diagonale che avantaggia la produttività personale. Sotto la scocca troviamo un processore AMD Ryzen AI 7 350, che grazie alla certificazione Copilot+ PC permette di sfruttare al meglio l'accelerazione degli ambiti di intelligenza artificiale
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Abbiamo provato per diversi giorni una new entry del mercato italiano, la Gowow Ori, una moto elettrica da off-road, omologata anche per la strada, che sfrutta una pendrive USB per cambiare radicalmente le sue prestazioni
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-01-2014, 15:34   #1
Tubo Catodico
Senior Member
 
L'Avatar di Tubo Catodico
 
Iscritto dal: Jun 2001
Messaggi: 782
[C++] Come creare una DLL

Di nuovo ciao, ho un'altro problema. Ho necessità di capire come posso creare e compilare una DLL con il C++ e Visual Studio. Stavo pensando ad una DLL caricata a Load Time, anche perchè dovrebbe essere più semplice. Apprezzo qualsiasi consiglio e, meglio ancora, link a tutorial e guide sia in italiano che in inglese.

Di nuovo grazie.
__________________
HP DV6-6170sl - Play 4 - PSVITA - Oneplus One
Tubo Catodico è offline   Rispondi citando il messaggio o parte di esso
Old 30-01-2014, 05:56   #2
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Tubo Catodico Guarda i messaggi
Di nuovo ciao, ho un'altro problema. Ho necessità di capire come posso creare e compilare una DLL con il C++ e Visual Studio. Stavo pensando ad una DLL caricata a Load Time, anche perchè dovrebbe essere più semplice. Apprezzo qualsiasi consiglio e, meglio ancora, link a tutorial e guide sia in italiano che in inglese.

Di nuovo grazie.
Normalmente creo un nuovo progetto di tipo console, assegnando il nome, directory, ....
Poi, nella seconda schermata, quando viene chiesto l' "Application Type", seleziono DLL
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 30-01-2014, 14:06   #3
Tubo Catodico
Senior Member
 
L'Avatar di Tubo Catodico
 
Iscritto dal: Jun 2001
Messaggi: 782
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Normalmente creo un nuovo progetto di tipo console, assegnando il nome, directory, ....
Poi, nella seconda schermata, quando viene chiesto l' "Application Type", seleziono DLL
Sto trovando delle difficoltà nel far interagire labview ed opencv. Ho fatto una piccola DLL di prova che prende in ingresso due numeri, li somma, e li restituisce in uscita. Ha funzionato perfettamente, il problema giunge con open cv, in pratica scrivendo:
Codice:
// opencv_32.cpp: definisce le funzioni esportate per l'applicazione DLL.
//

#include "stdafx.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>

using namespace cv;
using namespace std;


extern "C" __declspec(dllexport) void Gray(void)
{

	const string ind = "C:\\Users\\sviluppo\\Desktop\\Tuli.bmp";
	const string ind_2 = "C:\\Users\\sviluppo\\Desktop\\Tuli_Gray.bmp";
	const string error = "Error";

	Mat image;
	Mat gray_img;
	image = imread(ind, IMREAD_COLOR); // Read the file
	cvtColor(image, gray_img, CV_BGR2GRAY);

	if (!image.data) // Check for invalid input
	{
		cout << "Could not open or find the image" << std::endl;
		
	}

	namedWindow("Display window", WINDOW_AUTOSIZE); // Create a window for display.
	imshow("Display window", image); // Show our image inside it.

	namedWindow("Gray image", WINDOW_AUTOSIZE);
	imshow("Gray image", gray_img);

	imwrite(ind_2, gray_img);

	waitKey(0); // Wait for a keystroke in the window

	
}
non riesco a far vedere a labview questa stupida funzione Gray...
__________________
HP DV6-6170sl - Play 4 - PSVITA - Oneplus One
Tubo Catodico è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2014, 12:23   #4
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Hai gia' controllato i manuali, a riguardo? E' un bel po' che non uso 'ste cose, ma mi sembra strano che si possa creare una funzione qualsiasi in DLL, senza rispettare qualche convenzioni su
- nomi
- parametri delle funzioni
- modalita' di esportazione.

Per esempio, esportando i simboli come fai tu, (i.e. __declspec(dllexport) ), i vari nomi esportati dovrebbero essere decorati, sempre se non ricordo male.
"nomi decorati" significa che il compilatore cambia il nome aggiungendo delle stringhe di controllo, cosi' che il chiamante posso riconoscere i parametri da passare alla funzione, il loro tipo, il tipo di ritorno, ecc.

National Instruments raccomanda di leggere questi articoli:
http://zone.ni.com/reference/en-XX/h...therproglangs/
e
http://digital.ni.com/public.nsf/all...25731E00797C33

Hai avuto modo di consultarli? Purtroppo non posso farlo ora, ma spero che questo ti possa essere d'aiuto
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 01-02-2014, 10:47   #5
Tubo Catodico
Senior Member
 
L'Avatar di Tubo Catodico
 
Iscritto dal: Jun 2001
Messaggi: 782
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Hai avuto modo di consultarli? Purtroppo non posso farlo ora, ma spero che questo ti possa essere d'aiuto
Il secondo non lo avevo letto, grazie, appena ho mezz'ora libera a lavoro gli darò un'occhiata. Credo comunque che l'inghippo stia nell'header.
__________________
HP DV6-6170sl - Play 4 - PSVITA - Oneplus One
Tubo Catodico è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2014, 17:05   #6
Tubo Catodico
Senior Member
 
L'Avatar di Tubo Catodico
 
Iscritto dal: Jun 2001
Messaggi: 782
Allora, continuo ad avere degli errori molto strani. Ho aggiornato la dll in header e cpp nel seguente modo:
Codice:
#ifdef GENERICDLL_EXPORTS
#define GENERICDLL_API __declspec(dllexport)
#else
#define GENERICDLL_API __declspec(dllimport)
#endif

#include "stdafx.h"

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>

// Questa classe è esportata da Generic DLL.dll
class GENERICDLL_API CGenericDLL {
public:
	int Summ(int a, int b);
	int Sott(int a, int b);
	int opencv(int a);
	// TODO: aggiungere qui i metodi.
};
per l'header, mentre per quanto riguarda il file .cpp:
Codice:
// Generic DLL.cpp: definisce le funzioni esportate per l'applicazione DLL.
//

#include "stdafx.h"
#include "Generic DLL.h"

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>

using namespace cv;
using namespace std;


// Esempio di variabile esportata
GENERICDLL_API int nGenericDLL=0;

// Funzioni esportate.
GENERICDLL_API int Summ(int a, int b)
{
	return a+b;
}

GENERICDLL_API int Sott(int a, int b)
{
	return a - b;
}

GENERICDLL_API int opencv(int a)
{
	const string ind = "C:\\Users\\sviluppo\\Desktop\\Tuli.bmp";
	const string ind_2 = "C:\\Users\\sviluppo\\Desktop\\Tuli_Gray.bmp";

	//Mat image;
	

	return 5;
}
Le funzioni implementate sono parecchio stupide e così come sono funzionano ed io riesco a richiamare la dll tramite labview. Il problema è che se mi liito solamente a togliere il commento alla linea "Mat image;" nel .cpp ricevo il seguente errore da labview:
The library specified for this node cannot be found or cannot be loaded. Right-click the Call Library Function node and select Configure, then choose the correct library name or path.

La cosa è un po' strana e sinceramente non so che pesci prendere...
__________________
HP DV6-6170sl - Play 4 - PSVITA - Oneplus One
Tubo Catodico è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2014, 20:03   #7
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Tubo Catodico Guarda i messaggi
Le funzioni implementate sono parecchio stupide e così come sono funzionano ed io riesco a richiamare la dll tramite labview.
Ottimo! Mi sembra gia' un bel passo, no

Quote:
Originariamente inviato da Tubo Catodico Guarda i messaggi
The library specified for this node cannot be found or cannot be loaded. Right-click the Call Library Function node and select Configure, then choose the correct library name or path.
Diro' qualcosa di ovvio, ma dice che non riesce a trovare la libreria di OpenCV, oppure la libreria e' trovata ma non puo' essere caricata.

Per prima cosa, mi accerterei che la libreria sia trovata. Come sai, normalmente le librerie vengono cercate PRIMA nella directory di default (normalmente quella di lancio dell'applicazione) e poi nelle directory specificate nel PATH.
Hai verificato se le librerie di OpenCV (che presumo siano delle .dll, e' da un po' che preferisco JavaCV ) siano nella directory corrente, oppure in una directory nel path? Immagino di si, ma e' meglio controllare, per sicurezza.

Nel caso la libreria sia trovata ma non viene caricata, controllerei prima la bitness, vale a dire che applicazione e librerie dovrebbero essere sempre tutte a 32 bit o 64, e che mischiare (per esempio, compilare l'applicazione a 32 bit mentre la dll e' a 64 bit) puo' far molto male.
Ti ricordo che Visual Studio compila per default a 32 bit, e devi seguire le istruzioni sparse per il web/msdn (scusami, la rete non funziona bene, qui) per farlo compilare a 64.

Se anche questo controllo e' ok, io lascerei labview in un angolo per qualche minuto e proverei a fare una piccola applicazione di tipo console (la piu' semplice) che carichi la tua libreria .dll, per vedere se da li' funziona o meno:
- se non funziona, probabilmente uno dei due casi di cui sopra non e' stato ben verificato. Ad ogni modo, puoi ottenere piu' informazioni e stamparle a schermo, e le prove sono piu' agevoli.
- se funziona.... beh, occorre cercare cos'e' cambiato, e se Labview accetta indifferentemente librerie 32/64

Fammi sapere. Buona notte
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2014, 09:39   #8
Tubo Catodico
Senior Member
 
L'Avatar di Tubo Catodico
 
Iscritto dal: Jun 2001
Messaggi: 782
Era un problema di questo tipo. Una volta inserita la mia DLL e le DLL di OpenCV nella cartella della VI di LabVIEW ha funzionato tutto. Non mi resta che aggiornare il PATH e vedere se tutto funziona ancora; comunque adesso ho capito il problema.

Grazie ancora sei stato essenziale!
__________________
HP DV6-6170sl - Play 4 - PSVITA - Oneplus One
Tubo Catodico è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media AMD Ryzen 5 7500X3D: la nuova CPU da gaming con ...
Black Friday anticipato su Amazon: NARWA...
Disastro WhatsApp: esposti 3,5 miliardi ...
Hatsune Miku per tutti: ASUS ROG present...
La Definitive Edition di Tomb Raider sba...
Sicurezza PC: Microsoft punta sui chip d...
Gemini 3 Pro disponibile ora: è i...
Super sconti robot aspirapolvere: ECOVAC...
DOOM: The Dark Ages si espande con Ripat...
EA SPORTS annuncia il futuro della serie...
Tutte le TV già in offerta defini...
Meta non ha un monopolio nel settore dei...
L'amministrazione Trump presta 1 miliard...
Continua la rivoluzione interna in Intel...
Lenovo Legion 5i, gaming senza compromes...
iPhone 17 Pro a sorpresa: il nuovo mostr...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 12:09.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v