cs_bamoo
Messages postés17Date d'inscriptionvendredi 29 août 2003StatutMembreDernière intervention21 décembre 2004
-
20 déc. 2004 à 21:22
AnteManoclis
Messages postés154Date d'inscriptionjeudi 22 mai 2003StatutMembreDernière intervention 6 septembre 2007
-
22 déc. 2004 à 11:30
Bonjour,
J'espère que je poste au bon endroit car mon message concerne du VB et du C++ (c'est tout de même du code VB qui fait appel à une dll écrite en C++) :
J'ai une image au format A4R4G4B4, soit 16 bits par pixel.
Je veux la convertir en X1R5G5B5. Je voudrais faire des décalages et j'ai choisi la solution d'une dll en C++ car c'est très rapide.
Malheureusement, j'ai un petit problème avec les types...
Voici ma fonction en C++ :
Code:
__declspec(dllexport) int Scroll(int* dBuffer, int* srcBuffer,int nbLig, int nbCol)
{
memcpy(dBuffer,test,nbLig*nbCol);
return 0;
}
Voici maintenant mon code en VB .net :
Code:
Private Declare Function Scroll Lib "DLL_ttmt.dll" Alias "Scroll" (ByRef DestTableau As Int32, ByRef SrcTableau As Int32, ByVal nbLig As Int32, ByVal nbCol As Int32) As Int32
L'appel en VB .net :
Code:
Dim buffer(160 * 120 * 2) As Byte
...
Dim tab As Array
Dim ranks As Integer() = {110, 110}
tab = tex.LockRectangle(GetType(Byte), 0, LockFlags.None, ranks)
Scroll(tab(0, 0), buffer(0), 109, 109)
...
Je pense que ca vient des types que je passe. Je ne donne surement pas ce qu'il faudrait donner.
Quelqu'un peut il m'aider car je débute en vb ?
AnteManoclis
Messages postés154Date d'inscriptionjeudi 22 mai 2003StatutMembreDernière intervention 6 septembre 2007 21 déc. 2004 à 10:34
Salut,
Je maîtrise pas particulièrement ce sujet, mais peut-être cette erreur viendrait de la dll, dans la procédure, tu utilises une variable nommée test, et tu n'utilises pas srcBuffer, cela ne joue-t-il pas ?
cs_bamoo
Messages postés17Date d'inscriptionvendredi 29 août 2003StatutMembreDernière intervention21 décembre 2004 21 déc. 2004 à 12:14
Non, je me suis trompé en recopiant, j'ai bien srcBuffer en fait et la dll compile niekl....
Ca vient d'autres part, j'aurais du faire plus attention à ce détail...désolé :-)
AnteManoclis
Messages postés154Date d'inscriptionjeudi 22 mai 2003StatutMembreDernière intervention 6 septembre 2007 21 déc. 2004 à 13:16
Je n'utilise pas Vb.net, et je ne connais pas le type Int32 (bien que je comprenne que cela se traduise par un entier de 32-bits (vraiment trop balaise...)) cependant, je je traduis le int du C++ en Long en VB, peut-être cela va-t-il changer quelque chose... Autrement, le "Alias "Scroll"" est en théorie, inutile étant donné que la fonciton porte le même nom, je pense pas que ça change quoique ce soit, mais têtre, sait-on jamais... Une petite question aussi, as-tu vérifié que les variables nbLig et nbCol étaient bien reçues par la DLL ?
cs_bamoo
Messages postés17Date d'inscriptionvendredi 29 août 2003StatutMembreDernière intervention21 décembre 2004 21 déc. 2004 à 22:56
En fait, pour l'instant, je n'arrive pas à debugger la dll...
mais de toute facon, ca ne veint pas non plus de ca. J'ai mis la bonne valeur dans l'appel de la fonction memcpy en C++ et ca n'a pas marché non plus. Apparement je ne passe pas les bonnes adresses de mes tableaux ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
AnteManoclis
Messages postés154Date d'inscriptionjeudi 22 mai 2003StatutMembreDernière intervention 6 septembre 2007 22 déc. 2004 à 11:30
As-tu essayer en mettant des & à la place des * (c'est ton idée de passage d'adresse qui m'inspire ça) ? Sinon je ne connais pas le type Array, celui-ci n'existant pas en Vb6. Mais la DLL attend un entier à la place d'un Array, peut-être est-ce un problème. Une dernière possibilité, tab possède deux arguments, est-ce compatible avec la DLL ?