Bonjour,

Je commence à m'arracher les cheveux sur un truc sans doute très bête, alors j'ai décidé de vous demander votre aide. J'ai en effet parcouru pas mal de forums à la recherche d'une réponse, mais sans succès.

J'ai créé sous DEV C++ un petit programme qui lit le pixel à l'écran, et suivant la couleur du pixel en question, réalise une certaine action (pas la peine d'entrer dans les détails). Mon programme étant compliqué, je me suis décidé à passer sous Visual C++ afin de ne plus devoir gérer les LRESULT CALLBACK et autre WinAPI qui me causaient des soucis.

Le problème c'est qu'après reconversion pour rendre mon code compatible avec Visual, j'obtiens une erreur dont je ne sais que faire. J'ai isolé le problème et créer un programme minimal qui reproduit cette erreur. Il s'agit d'une fenêtre avec un bouton, et quand on clique sur le bouton, le programme est censé lire le pixel (100,100).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
 
#pragma once
 
#include <windows.h>
 
 
unsigned Rouge;
 
COLORREF Couleur;
 
namespace GetPixel2 {
 
	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>
	/// Description résumée de Form1
	///
	/// AVERTISSEMENT : si vous modifiez le nom de cette classe, vous devrez modifier la
	///          propriété 'Nom du fichier de ressources' de l'outil de compilation de ressource managée
	///          pour tous les fichiers .resx dont dépend cette classe. Dans le cas contraire,
	///          les concepteurs ne pourront pas interagir correctement avec les ressources
	///          localisées associées à ce formulaire.
	/// </summary>
	public ref class Form1 : public System::Windows::Forms::Form
	{
	public:
		Form1(void)
		{
			InitializeComponent();
			//
			//TODO : ajoutez ici le code du constructeur
			//
		}
 
	protected:
		/// <summary>
		/// Nettoyage des ressources utilisées.
		/// </summary>
		~Form1()
		{
			if (components)
			{
				delete components;
			}
		}
	private: System::Windows::Forms::Button^  button1;
	protected: 
 
	private:
		/// <summary>
		/// Variable nécessaire au concepteur.
		/// </summary>
		System::ComponentModel::Container ^components;
 
#pragma region Windows Form Designer generated code
		/// <summary>
		/// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
		/// le contenu de cette méthode avec l'éditeur de code.
		/// </summary>
		void InitializeComponent(void)
		{
			this->button1 = (gcnew System::Windows::Forms::Button());
			this->SuspendLayout();
			// 
			// button1
			// 
			this->button1->Location = System::Drawing::Point(113, 92);
			this->button1->Name = L"button1";
			this->button1->Size = System::Drawing::Size(75, 23);
			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(292, 266);
			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) {
 
			HDC hdcScreen = GetDC(NULL);
			Couleur = GetPixel(hdcScreen,100,100);
			Rouge = GetRValue(Couleur);
 
 
			 }
	};
}
L'erreur donne ça :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Édition des liens en cours...
GetPixel2.obj : error LNK2028: jeton non résolu (0A00000E) "extern "C" unsigned long __stdcall GetPixel(struct HDC__ *,int,int)" (?GetPixel@@$$J212YGKPAUHDC__@@HH@Z) référencé dans la fonction "private: void __clrcall GetPixel2::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@Form1@GetPixel2@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
GetPixel2.obj : error LNK2028: jeton non résolu (0A00000F) "extern "C" struct HDC__ * __stdcall GetDC(struct HWND__ *)" (?GetDC@@$$J14YGPAUHDC__@@PAUHWND__@@@Z) référencé dans la fonction "private: void __clrcall GetPixel2::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@Form1@GetPixel2@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
GetPixel2.obj : error LNK2019: symbole externe non résolu "extern "C" unsigned long __stdcall GetPixel(struct HDC__ *,int,int)" (?GetPixel@@$$J212YGKPAUHDC__@@HH@Z) référencé dans la fonction "private: void __clrcall GetPixel2::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@Form1@GetPixel2@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
GetPixel2.obj : error LNK2019: symbole externe non résolu "extern "C" struct HDC__ * __stdcall GetDC(struct HWND__ *)" (?GetDC@@$$J14YGPAUHDC__@@PAUHWND__@@@Z) référencé dans la fonction "private: void __clrcall GetPixel2::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@Form1@GetPixel2@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
C:\Documents and Settings\Ludovic\Mes documents\Visual Studio 2005\Projects\GetPixel2\Debug\GetPixel2.exe : fatal error LNK1120: 4 externes non résolus
Je ne suis pas très au point, mais je ne comprends pas où est le problème. Mes librairies sont correctement chargées (enfin j'espère) alors pourquoi y'a-t'il un problème de linkage ? Est-ce que j'utilise mal GetPixel et GetDC (problème de private ou autre lié à la classe) ? Mais pourquoi alors GetRValue ne pose pas de problème ? Pourtant cela marchait ainsi sous DEV C++, sans problème...

Merci beaucoup de votre aide.