Appel fonction d'une DLL (NvCplGetThermalSettings de nvcpl.dll)

Résolu
le_nain27 Messages postés 13 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 19 octobre 2006 - 20 sept. 2005 à 09:05
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 20 sept. 2005 à 19:10
Bonjour,

J'ai une documentation obtenue sur le site de nvidia concernant les fonctions contenues dans la DLL nvclp.dll.
Dans cette doc, j'ai ca:

<HR>

NvCplGetThermalSettings()


Function


Prototype


BOOL CDECL NvCplGetThermalSettings (IN UINT nWindowsMonitorNumber, OUT DWORD* pdwCoreTemp, OUT DWORD* pdwAmbientTemp, OUT DWORD* pdwUpperLimit);


Parameters In

UINT nWindowsMonitorNumber -- The display number shown on the Windows Display Properties->Settings page.


A value of 0 indicates the current primary Windows display device.


DWORD* must be a valid pointer --


pdwCoreTemp -- GPU temperature in degrees Celsius.


pdwAmbientTemp -- Ambient temperature in degrees Celsius.


pdwUpperLimit -- Upper limit of the GPU temperature specification.


Return Values

True on success.


False on failure.

<HR>
J'ai essayé de l'utiliser dans VB, je ai donc mis dans un module:

Public Declare Function NvCplGetThermalSettings Lib "nvcpl.dll" (ByVal nWindowsMonitorNumber As Long, _
ByRef pdwCoreTemp As Long, _
ByRef pdwAmbientTemp As Long, _
ByRef pdwUpperLimit As Long) As Long

Seulement, quand je l'appelle, j'ai une erreur m'indiquant que je n'ai pas respecté la convention d'appel de la procédure.
Où me suis-je trompé ?

11 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 sept. 2005 à 11:13
Exact, tu dois exporter une fonction __stdcall utilisable par VB et c'est toi qui appellera la cdecl nvidia depuis ta dll.

ciao...
BruNews, MVP VC++
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
20 sept. 2005 à 09:44
salut,
tu t'es peut-être trompé dans le fait que c'est un Get.

autrement dit, tu dois avoir un type quelque part, genre

private type tNvidiaThermal
pdwCoreTemp As Long
pdwAmbientTemp As Long
pdwUpperLimit As Long As Long
end type

pour déclarer

Public Declare Function NvCplGetThermalSettings Lib "nvcpl.dll" _
(ByVal nWindowsMonitorNumber As Long, _
ByRef pdwValuesCoreTemp As tNvidiaThermal) As Long

PCPT
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
20 sept. 2005 à 09:45
ByRef pdwValues As .....
0
le_nain27 Messages postés 13 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 19 octobre 2006
20 sept. 2005 à 10:32
Nope c'est pas ca.
Et je suis à moitié étonné, ca ne correspond pas du tout à la doc...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 sept. 2005 à 10:59
PCPT > je ne vois aucune structue à passer ici, seulement 4 params 32 bits dont les 3 derniers sont des pointeurs (Byref en VB).

Par contre il est impossible de s'en servir direct en VB car ne respecte pas le standard d'appel API (__stdcall), la fonction demande que ce soit l'appelant qui dépile les params, ce que VB ne fera pas.

ciao...
BruNews, MVP VC++
0
le_nain27 Messages postés 13 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 19 octobre 2006
20 sept. 2005 à 11:06
Alors je dois faire une autre dll en C, par exemple, pour pouvoir l'appeller depuis VB ?
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
20 sept. 2005 à 11:18
ok j'encaisse
0
le_nain27 Messages postés 13 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 19 octobre 2006
20 sept. 2005 à 11:33
Ok c'est clair.
Il va donc falloir que je :
- trouve un compilateur C sous windows
- fasse le code source d'une dll, qui en plus appelle une autre dll (et avec mes compétences en C ca va pas être trivial ^^)

Sacré défi, mais j'y crois :)
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
20 sept. 2005 à 12:40
Tu peux télécharger Dev-C++, qui comporte le compilateur libre gcc.



Ensuite, pour faire ta dll, va voir les exemple sur CppFrance.com, ca t'aidera sûrement à la faire !

_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
0
le_nain27 Messages postés 13 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 19 octobre 2006
20 sept. 2005 à 15:25
Merci Darksidious pour l'IDE C++.
Par contre je galere un peu pour la réalisation de la dll, quelqu'un aurait un bon exemple d'importation d'une fonction d'une dll quand on a son prototype mais pas le .lib ni le .h de la dll ?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 sept. 2005 à 19:10
Tu avais déja le prototype, tu nous l'as mis plus haut.

typedef BOOL (__cdecl *NVGETTHERM) (DWORD, LPDWORD, LPDWORD, LPDWORD);

ensuite LoadLibray sur la dll nvidia, GetProcAddress sur le nom de la fonction

NVGETTHERM pfunc;
hdll = LoadLibray(nomDllNvidiaIci);
if(!hdll) PAS BON ON SORT
pfunc = GetProcAddress(hdll, "NomFonctionNvidia");
if(!pfunc) PAS BON ON SORT

appeler pfunc avec tes params.

ciao...
BruNews, MVP VC++
0
Rejoignez-nous