Prima volta in Visual CPP

di Anonimizzato10960 il
18 risposte
È la prima volta che uso Visual C++
ho copiato su Visual C++
il codice in fondo al sito



e risulta così in Visual C++

#include <dshow.h>
#pragma once



namespace Prova2 {

	using namespace System;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;

	/// <summary>
	/// Riepilogo per Form1
	///
	/// AVVISO: se si modifica il nome della classe, sarà necessario modificare la
	///          proprietà 'Nome file di risorse' relativa allo strumento Compilatore di risorse gestite
	///          associato a tutti i file RESX da cui dipende la classe. In caso contrario,
	///          le finestre di progettazione non saranno in grado di interagire correttamente con le
	///          risorse localizzate associate al form.
	/// </summary>
	public ref class Form1 : public System::Windows::Forms::Form
	{
	public:
		Form1(void)
		{
			InitializeComponent();
			//
			//TODO: aggiungere qui il codice del costruttore.
			//
		}

	protected:
		/// <summary>
		/// Liberare le risorse in uso.
		/// </summary>
		~Form1()
		{
			if (components)
			{
				delete components;
			}
		}
	private: System::Windows::Forms::Button^  button1;
	protected: 

	private:
		/// <summary>
		/// Variabile di progettazione necessaria.
		/// </summary>
		System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
		/// <summary>
		/// Metodo necessario per il supporto della finestra di progettazione. Non modificare
		/// il contenuto del metodo con l'editor di codice.
		/// </summary>
		void InitializeComponent(void)
		{
			this->button1 = (gcnew System::Windows::Forms::Button());
			this->SuspendLayout();
			// 
			// button1
			// 
			this->button1->Location = System::Drawing::Point(57, 53);
			this->button1->Name = L"button1";
			this->button1->Size = System::Drawing::Size(93, 29);
			this->button1->TabIndex = 0;
			this->button1->Text = L"button1";
			this->button1->UseVisualStyleBackColor = true;
			this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
			// 
			// Form1
			// 
			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
			this->ClientSize = System::Drawing::Size(672, 264);
			this->Controls->Add(this->button1);
			this->Name = L"Form1";
			this->Text = L"Form1";
			this->ResumeLayout(false);

		}
#pragma endregion
	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
			 {

				 IGraphBuilder *pGraph = NULL;
    IMediaControl *pControl = NULL;
    IMediaEvent   *pEvent = NULL;

    // Initialize the COM library.
    HRESULT hr = CoInitialize(NULL);
    if (FAILED(hr))
    {
        printf("ERROR - Could not initialize COM library");
        return;
    }

    // Create the filter graph manager and query for interfaces.
    hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, 
                        IID_IGraphBuilder, (void **)&pGraph);
    if (FAILED(hr))
    {
        printf("ERROR - Could not create the Filter Graph Manager.");
        return;
    }

    hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
    hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);

    // Build the graph. IMPORTANT: Change this string to a file on your system.
    hr = pGraph->RenderFile(L"C:\\Example.avi", NULL);
    if (SUCCEEDED(hr))
    {
        // Run the graph.
        hr = pControl->Run();
        if (SUCCEEDED(hr))
        {
            // Wait for completion.
            long evCode;
            pEvent->WaitForCompletion(INFINITE, &evCode);

            // Note: Do not use INFINITE in a real application, because it
            // can block indefinitely.
        }
    }

    pControl->Release();
    pEvent->Release();
    pGraph->Release();
    CoUninitialize();



			 }
	};
}



dove ho inserito

DShow.h

da Visual C++

cliccando su Progetto-Aggiungi elemento esistente-

e cliccando su DShow.h

non so se questa procedura che ho seguito è

giusta

fatto sta che mi da 15 errori

non vede
IMediaEvent
Errore 2 error LNK2020: token non risolto (0A000014) IID_IMediaEvent Prova-2.obj Prova-2
Errore 3 error LNK2020: token non risolto (0A000015) IID_IMediaControl Prova-2.obj Prova-2
Errore 4 error LNK2020: token non risolto (0A000017) CLSID_FilterGraph Prova-2.obj Prova-2
Errore 5 error LNK2020: token non risolto (0A000018) IID_IGraphBuilder Prova-2.obj Prova-2

ecc..

mi sapete dare una mano?

18 Risposte

  • Aggiungi:

    #pragma comment(lib,"Strmiids.lib")

    subito dopo #pragma once, come indicato nei commenti
  • Grazie ma ho provato ed è tutto come prima
    io ho visual studio 2008

    comunque grazie mille
  • Io ho usato il VC++ 2012 e aggiungendo la nuova pagma non ho problemi.
    Comunque il problema di fondo è che il linker non trova la libreria. Prova a cercarla con ricerca files e se c'è aggiungila al progetto.
  • Sul mio pc non c'è Strmiids.lib , non è che me la potresti mandare così provo?

    di nuovo grazie tante
  • L'SDK delle DirectX é installato?
  • Ho scaricato DXSDK_Jun10.exe e intallato

    però non trovo ne

    DShow.h

    che avevo già trovato in internet

    ne

    Strmiids.lib

    non riesco a capire

    se compro Visual Studio 2012 trovo li dentro trovo tutto?

    e poi volevo sapere tu riesci a vedere (cioè fa il Play) proprio del file inserito nel programma

    intendo quello che hai scelto tu?
  • Provato con Vs2010 nessun problema. Ho piazzato un file avi su C, rinominato in example.avi vedo il filmato.
  • Volevo solo chiederti questo

    Strmiids.lib è in Visual Studio

    comunque Grazie di tutto

    Enrico
  • Scusa tanto la mia era una domanda
    strmiids.lib è in una directory di Visual Studio?

    Grazie
  • Fa parte del sdk delle directx, quindi lo dovresti trovare la. Una volta installate le sdk devi anche verificare se le librerie sono inserite nelle proprieta del linker.
    Intanto se utilizzi win7 sarebbe meglio utilizzare _uuidof()

    Fermi tutti: Ma che progetto hai creato? Quello é un progetto managed c++ non uno nativo. Per forza che hai problemi a trovare le librerie. Non puoi creare un progetto console win32?
  • Io la libreria l'ho cercata con cerca sul pc e non la trova
    vorrei sapere se mi puoi dire quale directx hai tu per farlo
    anche io

    poi ho provato con console win32 ma non si crea la form e non trovo
    il modo di aggiungerla

    Grazie
  • Invece ho trovato Strmiids.lib

    in tre directory

    Programmi\Microsoft SDK\v5.0\Lib\IA64

    e

    Programmi\Microsoft SDK\v6.0A\Lib\x64

    e

    Programmi\Microsoft SDK\v6.0A\Lib

    ho provato a copiarla nel progetto

    e ancora non funziona

    sono proprio alle prime armi

    dove non funziona niente

    strano che il pc non trovi niente
  • A che ti serve il form se il progetto copiato é console. Devi avere chiaro un po di cose. Managed C++ non centra niente col C++ é un estensione Microsoft per far funzionare tra di loro progetti native e .Net. Quindi decidi cosa vuoi imparare. In consile come dice la parola stessa non ti viene creato una finestra ma solo quella pseudo-dos.
  • Il form mi serve per mettere un bottone
    mettere li il codice
    e decidere quando cliccarci sopra
    Ma tu come hai fatto?
    Mi pare che mi serva un libro per imparare il VC++
    Di quello che dici ne terrò conto quando avrò letto qualcosa
    per ora non ho capito niente.
Devi accedere o registrarti per scrivere nel forum
18 risposte