Appel à une âme charitable pour compiler un PETIT projet C

Appel à une âme charitable pour compiler un PETIT projet C - C++ - Programmation

Marsh Posté le 28-10-2005 à 23:34:45    

Bonjour,
 
J'ai un rhéobus LIS 2 (non, continez à lire, je ne me suis pas trompé de catégorie !) qui peut piloter des ventilateurs en fonction de certaines températures.
Le logiciel de pilotage récupère les températures lues à partir de MBM5, du moins les 8 premières.
 
De base MBM5 ne sait pas lire les températures d'une GeForce 6600GT.
J'ai récupéré sur le net un plugin pour MBM5 qui le permet. Il fonctionne bien.
Hélas ! Ce plugin met les valeurs dans les variable Sensor21 à Sensor26 de MBM5.
Comme mon ligiciel de Rhoébus ne peut récupérer que les sensor 1 à sensor 8, je suis marron.
 
Le gars qui a fait le plugin a très gentiment founi les sources, apparrement en Visual C++.
J'ai modifié le source pour décaler les températures sur les sensors 3 à 8. Mais il me faut maintenant recompiler le projet.
 
Je ne sais pas faire.
J'ai téléchargé MS Visual C++ toolkit 2003 (c'est du télécharge gratuit), mais c'est un compilateur en ligne de commande, je suis perdu.
 
Je vous demande donc soit :
- de m'expliquer comment compiler mon projet avec MS Visual C++ toolkit 2003 (ou un autre outil libre que vous connaissez et que je peux légalement télécharger
- de m'offrir gracieusement vos services pour recompiler ce projet.
 
Je précise que le projet zippé fait 8ko, donc je vous l'enverrai par mail aisément.
 
Merci d'avance de votre gentilessse,
 
LoDeNo
 
 
Pour information,
Voici les fichiers du projet :
28/10/2005  22:54             8 533 MBM5NVdriver.cpp
18/07/2005  02:04               984 MBM5NVdriver.sln
20/07/2005  18:55             4 432 MBM5NVdriver.vcproj
13/07/2005  16:57               141 MBM5Plugin.def
18/07/2005  02:04               299 stdafx.cpp
18/07/2005  02:04               380 stdafx.h
 
 
Voici le contenu de MBM5NVdriver.cpp :

#include "stdafx.h"
#include <windows.h>
 
#define READ_CLOCKS
#define TRY_SLI
 
typedef unsigned char boolean;
 
#define MBM5_API __declspec(dllexport)
#define MBM5PLUGIN_FUN __stdcall
 
void Shutdown();
void SetTemps();
void ZeroSensors();
 
HANDLE hModule;
 
static int start = 0;
 
#define NrTemperature 32  
#define NrVoltage 16
#define NrFan 16
#define NrCPU 4
 
//    enum Bus
#define BusType     char
#define ISA         0
#define SMBus       1
#define VIA686Bus   2
#define DirectIO    3
 
//    enum SMB
#define SMBType         char
#define smtSMBIntel     0
#define smtSMBAMD       1
#define smtSMBALi       2
#define smtSMBNForce    3
#define smtSMBSIS       4
 
// enum Sensor Types
#define SensorType      char
#define stUnknown       0
#define stTemperature   1
#define stVoltage       2
#define stFan           3
#define stMhz           4
#define stPercentage    5    
 
#define SENSOR_TEMPERATURE 1
#define SENSOR_VOLTAGE 2
#define SENSOR_FAN 2
 
#pragma pack(1)
 
typedef struct {
    int   iType;          // type of sensor
    int         Count;          // number of sensor for that type
} SharedIndex;
 
typedef struct {
    SensorType ssType;          // type of sensor
    unsigned char ssName[12];   // name of sensor
    char sspadding1[3];         // padding of 3 byte
    double ssCurrent;           // current value
    double ssLow;               // lowest readout
    double ssHigh;              // highest readout
    long ssCount;               // total number of readout
    char sspadding2[4];         // padding of 4 byte
    char ssTotal[10];        // total amout of all readouts
    char sspadding3[6];         // padding of 6 byte
    double ssAlarm1;            // temp & fan: high alarm; voltage: % off;
    double ssAlarm2;            // temp: low alarm
} SharedSensor;
 
typedef struct {
    short siSMB_Base;            // SMBus base address
    BusType siSMB_Type;         // SMBus/Isa bus used to access chip
    SMBType siSMB_Code;         // SMBus sub type, Intel, AMD or ALi
    char siSMB_Addr;            // Address of sensor chip on SMBus
    unsigned char siSMB_Name[41];        // Nice name for SMBus
    short siISA_Base;            // ISA base address of sensor chip on ISA
    int siChipType;             // Chip nr, connects with Chipinfo.ini
    char siVoltageSubType;      // Subvoltage option selected
} SharedInfo;
 
typedef struct {
    double sdVersion;           // version number (example: 51090)
    SharedIndex sdIndex[10];     // Sensor index
    SharedSensor sdSensor[100];  // sensor info
    SharedInfo sdInfo;          // misc. info
    unsigned char sdStart[41];           // start time
    unsigned char sdCurrent[41];         // current time
    unsigned char sdPath[256];           // MBM path
} SharedData;
 
void set_sensor(SharedSensor *sensor, double current, char *name) {
 double total;
 char buffer[10];
 
 sensor->ssCurrent = current;
 
 if (start == 0) {
  total = current;
  sensor->ssLow = current;
  sensor->ssHigh = current;
  sensor->ssCount = 1;
 
  if (name != 0)
  {
   if (strncmp((const char*)sensor->ssName, "Sensor", 6) == 0)
    strcpy((char *)sensor->ssName, name);
  }
 } else {
  memcpy(buffer, sensor->ssTotal, 10);
  _asm {
   fld TBYTE PTR buffer;
   fstp total;
  }
 
  total += current;
  if (current < sensor->ssLow)
   sensor->ssLow = current;
  if (current > sensor->ssHigh)
   sensor->ssHigh = current;
  sensor->ssCount++;
 }
 
 _asm {
  fld total;
  fstp TBYTE PTR buffer;
 }
 memcpy(sensor->ssTotal, buffer, 10);
}
 
BOOL APIENTRY DllMain( HANDLE _hModule,  
       DWORD  ul_reason_for_call,  
       LPVOID lpReserved
       )
{
 switch (ul_reason_for_call)
 {
 case DLL_PROCESS_ATTACH:
  hModule = _hModule;
 case DLL_THREAD_ATTACH:
 case DLL_THREAD_DETACH:
 case DLL_PROCESS_DETACH:
  break;
 }
 return TRUE;
}
 
#if defined TRY_SLI
 char* pluginName = "NV driver temperature monitoring v7.2a SLI";
#else
 char* pluginName = "NV driver temperature monitoring v7.2a";
#endif
 
char* pluginMenu = "About";
 
#if defined READ_CLOCKS //(&&/|| TRY_SLI)
 static const unsigned numTempSources = 6;
#elif defined TRY_SLI
 static const unsigned numTempSources = 4;
#else
 static const unsigned numTempSources = 2;
#endif
 
MBM5_API unsigned char MBM5PLUGIN_FUN PlugInType(void)
{
 return 2;
}
MBM5_API char* MBM5PLUGIN_FUN PlugInName(void)
{
 return strdup(pluginName);
}
MBM5_API boolean MBM5PLUGIN_FUN PlugInInit(char* P, int H)
{
 start = 0;
 
 return true;
}
MBM5_API boolean MBM5PLUGIN_FUN PlugInStart(void)
{
 start = 0;
 
 SetTemps();
 
 return true;
}
MBM5_API boolean MBM5PLUGIN_FUN PlugInStop(void)
{
 ZeroSensors();
 start = 0;
 
 return true;
}
MBM5_API void MBM5PLUGIN_FUN PlugInPulse(void)
{
 SetTemps();
}
MBM5_API void MBM5PLUGIN_FUN PlugInPause(boolean P)
{
}
MBM5_API boolean MBM5PLUGIN_FUN PlugInClose(void)
{
 Shutdown();
 start = 0;
 return true;
}
MBM5_API char* MBM5PLUGIN_FUN PlugInMenuName(void)
{
 return strdup(pluginMenu);
}
MBM5_API void MBM5PLUGIN_FUN PlugInOption(unsigned char O)
{
 MessageBox(NULL,
   "Video card hardware monitor plugin for Motherboard Monitor 5\n"
   "GPU access method: NVidia display driver\n",
  "About", MB_OK);
}
 
void Shutdown()
{
}
 
void ZeroSensors()
{
 if (numTempSources <= 0)
  return;
 
 SharedData *ptr;
    HANDLE hSData;
 
 hSData = OpenFileMapping(FILE_MAP_WRITE, FALSE, "$M$B$M$5$S$D$" );
    if (hSData == 0)
  return;
    ptr = (SharedData *)MapViewOfFile(hSData, FILE_MAP_WRITE, 0, 0, 0);
    if (ptr == 0){
  CloseHandle(hSData);
  return;
    }
 
 //////////////////////////////////////////////////////////////////////////////////
 for (unsigned i = 0; i < numTempSources; i++)
 {
  set_sensor(&ptr->sdSensor[NrTemperature/*+NrVoltage+NrFan+NrCPU*/-i-7], 0, 0);  
 }
 //////////////////////////////////////////////////////////////////////////////////
 
 UnmapViewOfFile(ptr);
    CloseHandle(hSData);
}
 
void SetTemps()
{
 SharedData *ptrs;
    HANDLE hSData;
 
    hSData = OpenFileMapping(FILE_MAP_WRITE, FALSE, "$M$B$M$5$S$D$" );
    if (hSData == 0)
  return;
    ptrs = (SharedData *)MapViewOfFile(hSData, FILE_MAP_WRITE, 0, 0, 0);
    if (ptrs == 0){
  CloseHandle(hSData);
  return;
    }
 
 bool startTemps = false, startClocks = false;
 
 HDC display = CreateDC("\\\\.\\DISPLAY1", NULL, NULL, NULL);
 if (display != NULL)
 {
  static DWORD buffer[8*2*4] = {0};
 
// Temps /////////////////////////////////////////////////////////////////////////////////
#if defined TRY_SLI
  DWORD inTemps[8] = {0,0,0x1b0,0,(DWORD)&buffer[0],0,0x48,0};
#else
  DWORD inTemps[8] = {0,0,0x1b0,0,(DWORD)&buffer[0],0,0x24,0};
#endif
 
  DWORD outTemps[8] = {0,0,0,0,0,0,0,0xffffffff};
  if (ExtEscape(display, 0x7037, 0x20, (LPCSTR)&inTemps[0], 0x20, (LPSTR)&outTemps[0]) > 0)
  {
   set_sensor(&ptrs->sdSensor[NrTemperature-0-7], buffer[0], "GPU ambient" );
   set_sensor(&ptrs->sdSensor[NrTemperature-1-7], buffer[1], "GPU core" );
 
#if defined TRY_SLI
   set_sensor(&ptrs->sdSensor[NrTemperature-2-7], buffer[9], "GPU2 ambient" );
   set_sensor(&ptrs->sdSensor[3], buffer[10], "GPU2 core" ); J'ai uniquement changé cette valeur qui était à "NrTemperature-2-7"
#endif
   startTemps = true;
// Temps end /////////////////////////////////////////////////////////////////////////////
   
// Clocks /////////////////////////////////////////////////////////////////////////////////
#if defined READ_CLOCKS
   //DWORD inClocks1[5] = {0,0,0xfd,0,0};
   //DWORD inClocks1[5] = {0,0xDABBADDD,0xfd,0,0};
   DWORD inClocks1[5] = {0,0xDABBADDD,0xfd,0,0};
   DWORD outClocks1[5] = {0,0,0,0,0};
   if (ExtEscape(display, 0x7032, 0x14, (LPCSTR)&inClocks1[0], 0x14, (LPSTR)&outClocks1[0]) > 0)
   {
    set_sensor(&ptrs->sdSensor[NrTemperature-4-7], outClocks1[3] * 1e-6, "Core clock" );
    startClocks = true;
   }
 
   DWORD inClocks2[5] = {0,0xDABBADDD,0xfb,0,0};
   DWORD outClocks2[5] = {0,0,0,0,0};
   if (ExtEscape(display, 0x7032, 0x14, (LPCSTR)&inClocks2[0], 0x14, (LPSTR)&outClocks2[0]) > 0)
   {
    set_sensor(&ptrs->sdSensor[NrTemperature-5-7], outClocks2[3] * 1e-6, "Memory clock" );
    startClocks &= true;
   }
#endif
// Clocks end /////////////////////////////////////////////////////////////////////////////
 
  }
  DeleteDC(display);
 }
 
 if(startTemps && startClocks)
  start = 1;
 
 UnmapViewOfFile(ptrs);
    CloseHandle(hSData);
}
 
 
Voici le contenu de stdafx.cpp :
// stdafx.cpp : source file that includes just the standard includes
// MBM5NVdriver.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
 
#include "stdafx.h"
 
// TODO: reference any additional headers you need in STDAFX.H
// and not in this file
 
 
Voici le contenu de stdafx.h :
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
 
#pragma once
 
 
#define WIN32_LEAN_AND_MEAN  // Exclude rarely-used stuff from Windows headers
// Windows Header Files:
#include <windows.h>
 
// TODO: reference additional headers your program requires here
 
Voici le contenu de MBM5plugin.def :
EXPORTS
PlugInClose
PlugInInit
PlugInMenuName
PlugInName
PlugInOption
PlugInPause
PlugInPulse
PlugInStart
PlugInStop
PlugInType
 
Les autres ne sont pas lisibles en texte.


Message édité par LoDeNo le 31-10-2005 à 20:12:37
Reply

Marsh Posté le 28-10-2005 à 23:34:45   

Reply

Marsh Posté le 28-10-2005 à 23:37:21    

n'importe quoi.
 
 
et pour la précision : le compilo de MS n'est pas libre, il est gratuit.

Reply

Marsh Posté le 28-10-2005 à 23:38:31    

Taz a écrit :

n'importe quoi.
 
 
et pour la précision : le compilo de MS n'est pas libre, il est gratuit.


 
 
Je ne comprends pas la raison de ta réponse. Qu'est-ce qui ne va pas dans ma demande ?

Reply

Marsh Posté le 28-10-2005 à 23:53:19    

on est l'armée du salut : pose une question précise en expliquant où tu en est et les problème que tu rencontres
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
et non : "de m'expliquer comment compiler mon projet avec MS Visual C++ toolkit 2003" ça n'est pas une question précise

Reply

Marsh Posté le 29-10-2005 à 00:01:49    

Je vois.
En fait, je ne cherche pas à créer un projet, ni à élaborer un truc complexe. Etant donnés les fichiers que j'ai à ma disposition, je suppose qu'il doit exister une ligne de commande basique juste pour recompiler le projet.  
En appelant l'un des fichiers, le lien doit se faire avec les autres.
J'imagine que le fichier "MBM5NVdriver.vcproj" est le fichier projet et qu'il contient toutes les infos nécessaires à la compilation.
 
Une fois le Visual C++ toolkit installé, le seul outil que j'ai est une ligne de commande, et l'aide fournie (par LN/?) est franchement abcons. Mon problème n'est pas de régler un problème d'erreur à la compilation ... mais juste de savoir comment compiler ce projet.
 
Je sais que le fichier compilé est une DLL ("MBM5NVdriver.dll" ). Je n'ai guère plus d'info que celà. Je pensais que ma demande était très basique, j'ai essayé quand même de donner le maximum d'infos !

Message cité 1 fois
Message édité par LoDeNo le 29-10-2005 à 00:03:36
Reply

Marsh Posté le 29-10-2005 à 03:55:09    

<troll>en plus MS ça suxe</troll>
http://blastmanu.free.fr/site%20biguels/images/xhtml.png
 
ps: en plus je valide :)


Message édité par blastman le 29-10-2005 à 04:04:42

---------------
http://www.blastmanu.info
Reply

Marsh Posté le 29-10-2005 à 11:26:57    

LoDeNo a écrit :

Je vois.
En fait, je ne cherche pas à créer un projet, ni à élaborer un truc complexe. Etant donnés les fichiers que j'ai à ma disposition, je suppose qu'il doit exister une ligne de commande basique juste pour recompiler le projet.  
En appelant l'un des fichiers, le lien doit se faire avec les autres.
J'imagine que le fichier "MBM5NVdriver.vcproj" est le fichier projet et qu'il contient toutes les infos nécessaires à la compilation.
 
Une fois le Visual C++ toolkit installé, le seul outil que j'ai est une ligne de commande, et l'aide fournie (par LN/?) est franchement abcons. Mon problème n'est pas de régler un problème d'erreur à la compilation ... mais juste de savoir comment compiler ce projet.
 
Je sais que le fichier compilé est une DLL ("MBM5NVdriver.dll" ). Je n'ai guère plus d'info que celà. Je pensais que ma demande était très basique, j'ai essayé quand même de donner le maximum d'infos !


 
ben un compilateur, c un programme de toutes manières, ça n'a rien à voir avec de la programmation. Tu cherches à utiliser un programme qui est un compilateur. Va demander sur soft et réseaux... [:spamafote]
 
Sinon, éventuellement, cherche une gui qui utilise ce compilateur, comme ça, ce sera peut être plus simple. [:dawa]

Reply

Marsh Posté le 29-10-2005 à 11:27:53    

HLM \o/ [:youpi]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 29-10-2005 à 11:35:24    


 
 :hello:  :hello:  

Reply

Marsh Posté le 30-10-2005 à 10:09:37    

Comme ma demande ne semble pas si basique de ça, j'ai essayé d'avancer :
J'ai télécharger un compilateur Visual C++ en essai 30 jours (j'ai un mois donc pour résoudre mon problème !!)
 
Quand je tente un build, il me dit ne pas trouver Windows.h
Apparemment donc, il me manque ce fichier et tous les include qui lui sont associés. Dans quoi dois-je chercher pour trouver un Pack contenant ce que j'ai besoin ?

Reply

Marsh Posté le 30-10-2005 à 10:09:37   

Reply

Marsh Posté le 30-10-2005 à 12:09:47    

le platform SDK
http://www.microsoft.com/downloads [...] laylang=en


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 30-10-2005 à 23:35:04    

Merci, t'es sympa pour un  Harkonnen ;)
Je vais télécharger ça. Ca a l'air gros ... tout ça pour un petit programme de quelques Ko :/

Reply

Marsh Posté le 31-10-2005 à 13:39:36    

J'ai fait un build. Après avoir résolu quelques problèmes de chemin d'includes, j'ai un error que je ne sais pas du tout résoudre. Voici le log :
 
------ Build started: Project: MBM5NVdriver, Configuration: Release Win32 ------
Compiling...
stdafx.cpp
Compiling...
MBM5NVdriver.cpp
.\MBM5NVdriver.cpp(111) : warning C4996: 'strcpy' was declared deprecated
        C:\utilit\Visual C++ beta\VC\include\string.h(56) : see declaration of 'strcpy'
.\MBM5NVdriver.cpp(174) : warning C4996: 'strdup' was declared deprecated
        C:\utilit\Visual C++ beta\VC\include\string.h(170) : see declaration of 'strdup'
.\MBM5NVdriver.cpp(212) : warning C4996: 'strdup' was declared deprecated
        C:\utilit\Visual C++ beta\VC\include\string.h(170) : see declaration of 'strdup'
.\MBM5NVdriver.cpp(277) : warning C4311: 'type cast' : pointer truncation from 'DWORD *__w64 ' to 'DWORD'
Linking...
   Creating library C:\poubelle\MBM\MBM5NVdriver/MBM5NVdriver.lib and object C:\poubelle\MBM\MBM5NVdriver/MBM5NVdriver.exp
MBM5NVdriver.obj : error LNK2019: unresolved external symbol __imp__MessageBoxA@16 referenced in function "void __stdcall PlugInOption(unsigned char)" (?PlugInOption@@YGXE@Z)
MBM5NVdriver.obj : error LNK2019: unresolved external symbol __imp__DeleteDC@4 referenced in function "void __cdecl SetTemps(void)" (?SetTemps@@YAXXZ)
MBM5NVdriver.obj : error LNK2019: unresolved external symbol __imp__ExtEscape@24 referenced in function "void __cdecl SetTemps(void)" (?SetTemps@@YAXXZ)
MBM5NVdriver.obj : error LNK2019: unresolved external symbol __imp__CreateDCA@16 referenced in function "void __cdecl SetTemps(void)" (?SetTemps@@YAXXZ)
C:\poubelle\MBM\MBM5NVdriver/MBM5NVdriver.dll : fatal error LNK1120: 4 unresolved externals
Build log was saved at "file://c:\poubelle\MBM\MBM5NVdriver\Release\BuildLog.htm"
MBM5NVdriver - 5 error(s), 4 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
 
Avez-vous des conseils à me donner ?

Reply

Marsh Posté le 31-10-2005 à 23:32:34    

up, pliz

Reply

Marsh Posté le 02-11-2005 à 10:51:18    

Ok, mon problème est réglé : j'ai contacté le gars qui a créé le plugin : il m'a gentiment proposé de recompiler, mais il m'a aussi expliqué d'où venait mon problème (lien vers des includes gdi32 entre autres)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed