Bonjour à tous
J'ai une colle et je voudrais savoir si quelqu'un pourrait m'éclairer.
Je suis en train de développer des dlls pour ne plus utiliser les modules sous Access. Jusque là tout va bien.
J'ai un fichier .h :
et un fichier .cpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 extern "C" export int __stdcall Addition(int, int ); extern "C" export BSTR __stdcall TravailSurChaine(char* );
Pour avoir deux exemples, un sur des chiffres et l'autre sur des chaines de caractères. J'ai bien lu les trucs sur BSTR et tout ca.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 extern "C" int __stdcall Addition(int a, int b ) { return a + b; } extern "C" BSTR __stdcall TravailSurChaine(char* Nom) { return (SysAllocStringByteLen(strrev(Nom), strlen(Nom))); }
Quand j'appelles ces fonctions dans le code pas de soucis tout fonctionne bien. Par contre un truc pratique c'est que les fonctions peuvent utiliser dans le requêtes.
Ainsi si je fais dans une requete "SELECT Addition([Champ1],[Champ2]) FROM MaTable", ca marche aussi.
Mais si je fais "SELECT TravailSurChaine([Champ1]) FROM MaTable", j'obtiens bien mon nombre d'enregistrement mais pour chaque enregistrement mon champ est vide ? Du coup je comprend pas dans le code ca marche, dans les requêtes pour les champs numériques ca marche mais avec des chaines de caractères ca retourne une valeur nulle. C'est peut-être un problème de perte d'adressage dû à SysAllocStringByteLen mais je vois pas.
Si vous avez une idée merci beaucoup
Partager