none
Erro ao usar ExtractIcon RRS feed

  • Pergunta

  • Ola, estou enfrentando seguinte problema.

    Necessito extrair o icone de um executavel e apresenta-lo na minha aplicação.
    Estou tendo retorno de erro durante a compilação, estou utilizando VC++ 2008 em um Windows Forms Aplication.

    Durante a compilação estou tendo os seguintes erros:

    Error 1 error LNK2028: unresolved token (0A00000C) "extern "C" int __stdcall DestroyIcon(struct HICON__ *)" (?DestroyIcon@@$$J14YGHPAUHICON__@@@Z) referenced in function "private: void __clrcall ExtrarctIcon::Form1::Form1_Load(class System::Object ^,class System::EventArgs ^)" (?Form1_Load@Form1@ExtrarctIcon@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) ExtrarctIcon.obj ExtrarctIcon

    Error 2 error LNK2028: unresolved token (0A00000D) "extern "C" struct HICON__ * __stdcall ExtractIconW(struct HINSTANCE__ *,wchar_t const *,unsigned int)" (?ExtractIconW@@$$J212YGPAUHICON__@@PAUHINSTANCE__@@PB_WI@Z) referenced in function "private: void __clrcall ExtrarctIcon::Form1::Form1_Load(class System::Object ^,class System::EventArgs ^)" (?Form1_Load@Form1@ExtrarctIcon@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) ExtrarctIcon.obj ExtrarctIcon

    Error 3 error LNK2019: unresolved external symbol "extern "C" int __stdcall DestroyIcon(struct HICON__ *)" (?DestroyIcon@@$$J14YGHPAUHICON__@@@Z) referenced in function "private: void __clrcall ExtrarctIcon::Form1::Form1_Load(class System::Object ^,class System::EventArgs ^)" (?Form1_Load@Form1@ExtrarctIcon@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) ExtrarctIcon.obj ExtrarctIcon

    Error 4 error LNK2019: unresolved external symbol "extern "C" struct HICON__ * __stdcall ExtractIconW(struct HINSTANCE__ *,wchar_t const *,unsigned int)" (?ExtractIconW@@$$J212YGPAUHICON__@@PAUHINSTANCE__@@PB_WI@Z) referenced in function "private: void __clrcall ExtrarctIcon::Form1::Form1_Load(class System::Object ^,class System::EventArgs ^)" (?Form1_Load@Form1@ExtrarctIcon@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) ExtrarctIcon.obj ExtrarctIcon

    Abaixo segue o código fonte que estou utilizando.

    // Form1.h

    #pragma once

    namespace ExtrarctIcon {

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

     public ref class Form1 : public System::Windows::Forms::Form
     {
     public:
      Form1(void)
      {
       InitializeComponent();
      }

     protected:
      ~Form1()
      {
       if (components)
       {
        delete components;
       }
      }

     private:
      System::ComponentModel::Container ^components;
      void Form1_Load(System::Object^  sender, System::EventArgs^  e);

    #pragma region Windows Form Designer generated code
      void InitializeComponent(void)
      {
       this->SuspendLayout();
       this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
       this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
       this->ClientSize = System::Drawing::Size(292, 266);
       this->Name = L"Form1";
       this->Text = L"Form1";
       this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);
       this->ResumeLayout(false);

     }
    #pragma endregion
     };
    }

    // ExtrarctIcon.cpp : main project file.

    #include "stdafx.h"
    #include "Form1.h"
    #include "windows.h"
    #include "shellapi.h"

    using namespace ExtrarctIcon;

    [STAThreadAttribute]
    int main(array<System::String ^> ^args)
    {
     // Enabling Windows XP visual effects before any controls are created
     Application::EnableVisualStyles();
     Application::SetCompatibleTextRenderingDefault(false);

     // Create the main window and run it
     Application::Run(gcnew Form1());
     return 0;
    }
    void Form1::Form1_Load(System::Object^  sender, System::EventArgs^  e) {
     HICON retval;
     IntPtr ip = this->Handle ;
     HINSTANCE hwnd = static_cast<HINSTANCE> (ip.ToPointer());
     retval = ExtractIcon(hwnd, (LPCWSTR)"teste.exe", 0);
     DestroyIcon(retval);

    }

    Alguem tem ideia do que esta acontecendo, ou alguma outra ideia para poder extrair icines de um executável?

    Grato pela atenção, Norton.

    sábado, 21 de março de 2009 13:22