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

le_nain27 13 Messages postés mercredi 8 septembre 2004Date d'inscription 19 octobre 2006 Dernière intervention - 20 sept. 2005 à 09:05 - Dernière réponse : BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention
- 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

BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 20 sept. 2005 à 11:13
+3
Utile
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++
Cette réponse vous a-t-elle aidé ?  
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 20 sept. 2005 à 09:44
0
Utile
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
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 20 sept. 2005 à 09:45
0
Utile
ByRef pdwValues As .....
le_nain27 13 Messages postés mercredi 8 septembre 2004Date d'inscription 19 octobre 2006 Dernière intervention - 20 sept. 2005 à 10:32
0
Utile
Nope c'est pas ca.
Et je suis à moitié étonné, ca ne correspond pas du tout à la doc...
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 20 sept. 2005 à 10:59
0
Utile
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++
le_nain27 13 Messages postés mercredi 8 septembre 2004Date d'inscription 19 octobre 2006 Dernière intervention - 20 sept. 2005 à 11:06
0
Utile
Alors je dois faire une autre dll en C, par exemple, pour pouvoir l'appeller depuis VB ?
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 20 sept. 2005 à 11:18
0
Utile
ok j'encaisse
le_nain27 13 Messages postés mercredi 8 septembre 2004Date d'inscription 19 octobre 2006 Dernière intervention - 20 sept. 2005 à 11:33
0
Utile
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 :)
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 20 sept. 2005 à 12:40
0
Utile
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/
le_nain27 13 Messages postés mercredi 8 septembre 2004Date d'inscription 19 octobre 2006 Dernière intervention - 20 sept. 2005 à 15:25
0
Utile
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 ?
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 20 sept. 2005 à 19:10
0
Utile
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.