Appel fonction d'une DLL (NvCplGetThermalSettings de nvcpl.dll) [Résolu]

Messages postés
13
Date d'inscription
mercredi 8 septembre 2004
Dernière intervention
19 octobre 2006
- - Dernière réponse : BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
- 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é ?
Afficher la suite 

11 réponses

Meilleure réponse
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
3
Merci
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++

Merci BruNews 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
0
Merci
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
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
0
Merci
ByRef pdwValues As .....
Messages postés
13
Date d'inscription
mercredi 8 septembre 2004
Dernière intervention
19 octobre 2006
0
Merci
Nope c'est pas ca.
Et je suis à moitié étonné, ca ne correspond pas du tout à la doc...
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
0
Merci
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++
Messages postés
13
Date d'inscription
mercredi 8 septembre 2004
Dernière intervention
19 octobre 2006
0
Merci
Alors je dois faire une autre dll en C, par exemple, pour pouvoir l'appeller depuis VB ?
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
0
Merci
ok j'encaisse
Messages postés
13
Date d'inscription
mercredi 8 septembre 2004
Dernière intervention
19 octobre 2006
0
Merci
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 :)
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
0
Merci
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/
Messages postés
13
Date d'inscription
mercredi 8 septembre 2004
Dernière intervention
19 octobre 2006
0
Merci
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 ?
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
0
Merci
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++

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.