Bonjour,
Voici un point de blocage sur lequel je bute depuis pas mal de temps. Merci à ceux qui pourront m'aider.
J'ai développé un soft qui fonctionne sur Excel (VBA) et qui fait appel à des dll (codées en Visual C++ 6.0) pour effectuer des calculs. Tout fonctionne sans pb avec une plate forme 32 bits.
Sous Win Seven 64 bits, rien ne fonctionne en l'état, j'ai supposé une incompatibilité dans le codage des variables utilisées. J'ai recréé mes dll en utilisant Visual C++ Express 2008 (qui au passage ne me permet pas de compiler en natif pour les plate-formes 64 bits, mais peu importe).
Au final, les fonctions de mes dll qui retournent des valeurs numériques à mon code VBA fonctionnent sans pb.
Ca se complique avec les fonctions qui retournent des chaînes de caractères. A chaque retour d'une de ces fonctions, j'obtiens un plantage d'Excel qui se ferme de façon intempestive.
Initialement j'utilisais le code suivant :
Dans la DLL:
- Fichier d'entête:
#ifdef MADLL_EXPORTS
#define MADLL_API __declspec(dllexport)
#else
#define MADLL_API __declspec(dllimport)
#endif
- Fichier code:
LPSTR __stdcall RetourChaineParFonction(){
LPSTR* t = new LPSTR[5];
t[0] = "Texte par fonction";
return t[0];
}
void __stdcall RetourChaineParReference(char* ts){
strcpy(ts, "Texte par référence");
}
Dans la macro VBA:
Declare Function RetourChaineParFonction Lib "C:\Chemin\MaDll" () As String
Declare Sub RetourChaineParReference Lib "C:\Chemin\MaDll" (ByRef t As String, ByVal i As Long)
Public Sub RetourTexte()
Dim str() As String, i As Long, NbTxt As Long
str(1) = String(255, vbNullChar) 'allocation d'espace mémoire
str(1) = RetourChaineParFonction 'Provoque un plantage d'Excel
RetourChaineParReference str(1), 0 'Provoque un plantage d'Excel
End Sub
Bref, Excel plante à chaque tentative de récupération de ma chaine.
J'ajoute que j'ai également essayé d'utiliser le format LPCSTR, BSTR, sans plus de succès (le format LPTSTR bloque même à la compilation).
Enfin, je précise que ça marche sans pb sur une plate forme 32 bits.
Merci d'avance à tous ceux qui peuvent m'apporter leur aide.