Probleme utilisation dll C++

Résolu
bibifinal Messages postés 62 Date d'inscription mardi 8 septembre 2009 Statut Membre Dernière intervention 3 mars 2010 - 2 févr. 2005 à 10:24
bibifinal Messages postés 62 Date d'inscription mardi 8 septembre 2009 Statut Membre Dernière intervention 3 mars 2010 - 3 févr. 2005 à 09:58
bonjour tout le monde, voila g créé ma dll, qui fonctionne (normalement) mais lorsque je l'appelle ca plante avec un type incompatible, la dll est en C++ et je l'utilise en vb.net
voila mon code, si y a des trucs vraiment affreu n'hesitez pas a le dire

pour la partie en C++ (la dll)

#include <stdafx.h>

#include <mapi.h>

#include <mapix.h>

#include <objbase.h>

#include <edk.h>

#include <Edkmdb.h>

#include <MAPIUtil.h>

#include <MAPIUTIL.H>

#include <MAPIDEFS.H>

#include <wabdefs.h>

#pragma
comment(
lib, "mapi32.lib")


extern "C" {

#endif
int
__declspec(
dllexport) SetPropri(SPropValue *XoSprop,MapiMessage XoMess);

#ifdef __cplusplus
}

#endif


int
__declspec(
dllexport) SetPropri(SPropValue *XoSprop,MapiMessage XoMess){

LPMAPIPROP Xomapiprop = NULL;
Xomapiprop = (LPMAPIPROP) &XoMess;
LPSPropValue XoSpropValue = NULL;
XoSpropValue->ulPropTag = XoSprop->ulPropTag;
XoSpropValue->dwAlignPad = 0;
XoSpropValue->Value= XoSprop->Value;
HRESULT hr;
hr= HrSetOneProp(Xomapiprop,XoSpropValue);

return 1;
}

pour son utilisation avec vb.net j'utilise

Public
Declare
Function SetPropri
Lib "SetPropri.dll" (
ByRef SPropValue
As
Object,
ByRef Message
As
Object)
As
Integer

puis pour l'appeller ca
xo1 = modSaisie.SetPropri(XoPropValue, XooMessage)

et quand je lance mon prog ca met parametres incorrecte ...snif
merci de toute aide
Naruto

21 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
3 févr. 2005 à 09:47
Et en vérifiant avec Depends.exe le nom est le bon ?
Alors là je vois pas. Et comme je l'ai dis la compatibilité VB.NET et c++ je n'y connais rien du tout.
Faudrait peut-être poster un nouveau message sur le forum (C/C++ et aussi VB je pense) au sujet du passage de param entre un prog VB.net et une dll c++.

Enfin si la fonction de mapi de peut être utilisée qu'ne delphi ou c) il sera peutêtre pas possible de l'appeler à partir de VB.net (même via une dll c++)...
3
bibifinal Messages postés 62 Date d'inscription mardi 8 septembre 2009 Statut Membre Dernière intervention 3 mars 2010
2 févr. 2005 à 10:36
Changement d'erreur, en fait maintenant ca me met qu'il ne trouve pas le point d'entré de la dll...
Naruto
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
2 févr. 2005 à 10:57
Il faut rajouter un fichier .def au projet de la dll avec :
EXPORTS:
SetPropri

car sinon comme la fct est en __stdcall, le compilo va rajouter @8 au nom (car la fct prend 2 paramètres de 4 octets sur la pile).
0
bibifinal Messages postés 62 Date d'inscription mardi 8 septembre 2009 Statut Membre Dernière intervention 3 mars 2010
2 févr. 2005 à 11:00
je l'avais deja fait...ou enfin ca plantais du coup j'ai enlevé l'include du fichier .def
mais g ca dedans, je me demande ce qui ne va pas (tel quel)

LIBRARY SetPropri


EXPORTS


SetPropri @16

Naruto
0

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

Posez votre question
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
2 févr. 2005 à 11:17
seule la section EXPORTS avec le nom des fonctions est utile (@16 sert à rien).

Sinon, dans le répertoire de visual il ya un prog nomé depends qui permet de vérifier si la fonction est bien exportée de la dll et de voir le nom sous lequel elle est exportée. Pour cel il suffit d'exécuter depends.exe et d'ouvrir ta dll avec.
0
bibifinal Messages postés 62 Date d'inscription mardi 8 septembre 2009 Statut Membre Dernière intervention 3 mars 2010
2 févr. 2005 à 11:20
oulala ca me met un truc bien sympa je trouve

Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.

avec 1 fonction dans la 2ieme case a droite, mais pas dans la premiere
Naruto
0
bibifinal Messages postés 62 Date d'inscription mardi 8 septembre 2009 Statut Membre Dernière intervention 3 mars 2010
2 févr. 2005 à 11:22
[mailto:?SetPropri@@YAHPAU_SPropValue@@PAUIMAPIProp@@@Z ?SetPropri@@YAHPAU_SPropValue@@PAUIMAPIProp@@@Z]
que ca me met dans la fonction que je veu exporter
Naruto
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
2 févr. 2005 à 11:23
Ouais, en fait c'est pas trop grave car c'est une dll qui n'est pas chargée au lancement mais plus tard (delay-load) si des conditions sont requises. La zone importante est celle en bas à droite lorque tu sélectionne le nom de ta dll dans le panneau de gauche.
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
2 févr. 2005 à 11:27
force la déclaration en extern "C" (parce que là c'est la mixture c++ qui est mise) et rajoute __stdcall :

extern "C" int __declspec(dllexport) __stdcall SetPropri(SPropValue *XoSprop,MapiMessage XoMess);

vérifie que le .def est bien dans le projet.
0
bibifinal Messages postés 62 Date d'inscription mardi 8 septembre 2009 Statut Membre Dernière intervention 3 mars 2010
2 févr. 2005 à 11:28
l'entry-point donc, je suppose, qui est 0*0001151E
(grande question, je me demande si tu a visual studio, je pourrais t'envoyer ma source pour voir si y a quelque chose qui va pas du tout (enfin si tu voi ce que je veu faire avec ma dll))
parce que je ne sais meme pas si c mon prog en vb qui plante ou la dll (eu g un EXTERN "C" qui veu dire que c que pour du C ou pas (normalement non vu que g deja réussit a renvoyer une valeur de la dll))
Naruto
0
bibifinal Messages postés 62 Date d'inscription mardi 8 septembre 2009 Statut Membre Dernière intervention 3 mars 2010
2 févr. 2005 à 11:38
désolé le debug est assez gros, je peu l'envoyer sans le debug c beaucoup moin gros du coup
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
3 févr. 2005 à 09:07
Alors pour éviter les noms à rallonge du C++, il faut mettre extern "C" à chaque fois (à la déclaration et à la définition :


extern "C" int __declspec(dllexport) SetPropri(SPropValue *XoSprop,MapiMessage XoMess);


extern "C" int __declspec(dllexport) SetPropri(SPropValue *XoSprop,MapiMessage XoMess){
LPMAPIPROP Xomapiprop = NULL;
Xomapiprop = (LPMAPIPROP) &XoMess;
LPSPropValue XoSpropValue = NULL;
XoSpropValue->ulPropTag = XoSprop->ulPropTag;
XoSpropValue->dwAlignPad = 0;
XoSpropValue->Value= XoSprop->Value;
HRESULT hr;
hr= HrSetOneProp(Xomapiprop,XoSpropValue);
return 1;
}

Cependant, pourquoi ne pas utiliser directement HrSetOneProp à partir de VB. Il faut simplement savoir que cette fonction est dans mapi32.dll sous le nom HrSetOneProp@8

pour la récupérer en VB ça doit être un truc du genre :
Declare Function HrSetOneProp Lib "mapi32" Alias "HrSetOneProp@8
" (...) As Long

les (...) correspondent aux param à la sauce VB que je ne connais pas.
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
3 févr. 2005 à 09:08
pour la partie c++ j'ai oublié de mettre __stdcall :


extern "C" int __declspec(dllexport) __stdcall SetPropri(SPropValue *XoSprop,MapiMessage XoMess);
0
bibifinal Messages postés 62 Date d'inscription mardi 8 septembre 2009 Statut Membre Dernière intervention 3 mars 2010
3 févr. 2005 à 09:12
dison que au niveau de vb6 ca ne marchais pas du tout d'appeller directement l'api HrSetOneProp de mapi32, ca plantais des que je pensais avoir les bons parametres, donc c plutot au niveau de la déclaration que j'arrivais jamais, du coup g opté pour le c++, et la il me dit une déclaration (du coup je peu peu etre passer ces declarations en .net, mais toutes les infos que g cherché la dessus m'ont dis que cette fonction n'était utilisable que en Delphi et en c++ lol (a ton avis quel serait sa declaration en vb .net)

Naruto
0
bibifinal Messages postés 62 Date d'inscription mardi 8 septembre 2009 Statut Membre Dernière intervention 3 mars 2010
3 févr. 2005 à 09:15
quand je tente de déclarer en extern la deuxieme decaration ca me met ca

d:\projet Lotus-Outlook .net\SetPropri\SetPropri\proc.cpp(31): error C2733: seconde liaison C d'une fonction surchargée 'SetPropri' non autorisée

Naruto
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
3 févr. 2005 à 09:15
Aucune idée je connais à peine VB alors VB .net ...

Normalement ce que je t'ai donné devrait exporter la fonction C++ sous un nom normal. Ensuite pour passer les params je ne peux plus d'aider...
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
3 févr. 2005 à 09:17
Vire la première déclararion (inutile de toute façon)
0
bibifinal Messages postés 62 Date d'inscription mardi 8 septembre 2009 Statut Membre Dernière intervention 3 mars 2010
3 févr. 2005 à 09:24
oui, maintenant ca me met au moin un nom correct lol, et au niveau des parametres ca bug tjs autant, mais merci bien deja, a mon avis c au niveau de la compabilité entre c++ et vb que ca va po...
Naruto
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
3 févr. 2005 à 09:32
Regarde du coté des sources de brunews sur l'utilsation de dll c/c++ en VB :

http://www.cppfrance.com/code.aspx?id=20672
0
bibifinal Messages postés 62 Date d'inscription mardi 8 septembre 2009 Statut Membre Dernière intervention 3 mars 2010
3 févr. 2005 à 09:33
Une exception non gérée du type 'System.EntryPointNotFoundException' s'est produite dans Projet1.exe


Informations supplémentaires : Impossible de trouver le point d'entrée SetPropri dans la DLL SetPropri.dll.

lol pour changer (et ca met aussi quand je précise le Alias setpropri@8)

Naruto
0
Rejoignez-nous