Declaration d'une dll

[Résolu]
Signaler
Messages postés
223
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
3 juin 2019
-
Messages postés
223
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
3 juin 2019
-
Toujours des soucis avec mes dll , mais je n'ai jamais été aussi proche du but
bref j'ai une dll décalrée comme ça en C
GM_DLL_EXPORTED GM_Error_t32 __stdcall GM_SelectProjection
(
GM_Projection_t* aSelProj, // out: projection selected by user
const GM_Projection_t* aInitProj // in: initial projection to use (NULL for default)
);

GM_DLL_EXPORTED est déclaré ainsi #define GM_DLL_EXPORTED __declspec(dllimport)
je ne comprends pas ce que ça veut dire
__stdcall je sais que ça a un rapport avec Win32 API mais je ne sais pas comment l'initialiser

En c# je pense que la déclaration doit plus ou moins ressembler à ça mais je ne suis pas sur de plus je n'arrive pas à l'appeler à partir de mon code
[DllImport(DLLFileName, EntryPoint = "GM_SelectProjection")]
public static extern GM_Error_t32 GM_SelectProjection(ref GM_Projection_t aSelProj, ref GM_Projection_t aInitProj);

P.S. : plus je vous mes questions plus je me dis que le chemin va être long ... très long.

www.survey-copter.com

7 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Désolé, j'avais pas vu ton message..

[DllImport(DLLFileName, EntryPoint = "GM_GetProjection ")] // <- T'as mis un un espace dans le nom !!
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
__stdcall c'est la convention d'appel par défaut donc rien à rajouter, mais je comprends pas __declspec( dllimport ) ça devrait être __declspec( dllexport ).
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Cherche l'outil DUMPBIN dans Visual Studio ou dans le SDK de Windows et fait "dumpbin -exports" pour voir les fonctions exportées de ta DLL parce que si elle n'est pas exportée tu ne pourras pas l'appeller depuis ton code C#.
Messages postés
223
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
3 juin 2019
1
Bon ben dumpbin ne veut pas s'executer chez moi , sinon est-ce que ma declaration de fonction est bonne ?
[DllImport(DLLFileName, EntryPoint = "GM_SelectProjection")]
        public static extern GM_Error_t32 GM_SelectProjection(ref GM_Projection_t aSelProj, ref GM_Projection_t aInitProj);

et comment je l'appele :
GlobalMapperDLL.GM_SelectProjection(?, ?)
Je n'ai pas compris comment passer les paramètres
merci

www.survey-copter.com
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Lance le depuis la ligne de commande.

GlobalMapperDLL.GM_SelectProjection( ref maStruct1, ref maStruct2 );
Messages postés
223
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
3 juin 2019
1
ca à l'air de marcher mais j'ai un autre souci avec une autre fonction de cette dll
lors de l'appel j'ai un erreur du type
"Impossible de trouver le point d'entrée 'GM_GetProjection ' dans la DLL 'C:\Global.Mapper\GlobalMapperSDK\bin\GlobalMapperInterface.dll'."

elle est déclarée comme ca
[DllImport(DLLFileName, EntryPoint = "GM_GetProjection ")]
        public static extern GM_Error_t32 GM_GetProjection(out GM_Projection_t aProj);

appelé comme ca
GM_Projection_t ProjectionSysteme;
GlobalMapperDLL.GM_GetProjection(out ProjectionSysteme);

et dans dumpbin que j'ai trouvé dans les outils en commande dos l'entrée est bien déclarée
231   E6 000EF170 GM_GetProjection

En C++ elle est appelée comme ca
GM_Projection_t theCurProj;
GM_Error_t32 theErr = GM_GetProjection( &theCurProj );

Je pense qu'une fois tout mes prb résolu , je ferai un petit post sur les appels en c# d'un dll c++ car moi je galère et je ne dois pas être le seul

www.survey-copter.com
Messages postés
223
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
3 juin 2019
1
J'ai vu aussi pour l'espace Merci

www.survey-copter.com