Obtenir le Texte d'un Contrôle de modification (Pur API Win32)
J'ai essayé d'obtenir que cela fonctionne comme pour les âges, mais sans succès (visage triste).
int iChars = GetWindowTextLength (GetDlgItem(handle,ID))+1; //Room for 'int iChars = GetWindowTextLength (GetDlgItem(handle,ID))+1; //Room for '\0'
char* pstrText;
pstrText = (char*) malloc (sizeof(char)*iChars);
if (pstrText != NULL) {
//GetWindowText (GetDlgItem(handle,ID), pstrText, iChars);
GetDlgItemText(handle,ID,pstrText,iChars);
}
return pstrText; //Memory gets freed after it returns
'
char* pstrText;
pstrText = (char*) malloc (sizeof(char)*iChars);
if (pstrText != NULL) {
//GetWindowText (GetDlgItem(handle,ID), pstrText, iChars);
GetDlgItemText(handle,ID,pstrText,iChars);
}
return pstrText; //Memory gets freed after it returns
De travail exemple:
char* MWC::System::TextBox::GetText(){
int len = SendMessage(handle, WM_GETTEXTLENGTH, 0, 0);
char* buffer = new char[len];
SendMessage(handle, WM_GETTEXT, (WPARAM)len+1, (LPARAM)buffer);
return buffer;
}
Même si vous reassing le pointeur de la mémoire est supprimé donc le résultat sera toujours un supprimée de la mémoire. Aussi, la taille du pointeur sera 32/64 bits en fonction de la platforme de vous sont en cours d'exécution. La quatrième paramètre de la fonction GetDlgItemText doit être iChars.
Oui , et bien, ce n'est pas la cause de la fonction de ne pas fonctionner correctement.
"Pas de travail" n'est pas assez bon pour nous. Comment est-il échouer. Être précis. Nous ne pouvons pas voir votre écran.
Oui , et bien, ce n'est pas la cause de la fonction de ne pas fonctionner correctement.
"Pas de travail" n'est pas assez bon pour nous. Comment est-il échouer. Être précis. Nous ne pouvons pas voir votre écran.
OriginalL'auteur Christian | 2011-09-12
Vous devez vous connecter pour publier un commentaire.
La
wParam
paramètre est incorrect ici:Vous devez passer
len+1
en raison de la non-terminaison.OriginalL'auteur David Heffernan
Vous libérer la mémoire à l'avant de la retourner!!!
Vous devez fournir un moyen pour le client de libre quand il n'est plus nécessaire...
Espérons que cette aide!
pstrTest est une variable locale. La variable est détruite quand il s'agit de la portée, mais la mémoire reste alloué jusqu'à ce que vous appeler free() sur cette mémoire. Vous devez trouver un moyen de libérer la mémoire quand il n'est plus nécessaire.
Quel est le deuxième exemple? Elle retourne rien!
Troisième paramètre de la fonction SendMessage doit être len+1. Tout le reste semble bon, vous êtes sûr que la "poignée" est-elle valable?
OriginalL'auteur beren
Vous déjà gratuitement la mémoire pointé par
pstrText
avant votre retour. Vous devez retourner un objet de type string qui peut en fait contenir le texte et la libère automatiquement lors de la libération. Ou vous devrez demander à l'appelant d'allouer de la mémoire pour la chaîne, mais alors vous êtes juste envelopper l'API.Vous avez besoin de libérer
pstrText
après avoir lu/affiche/copié (sinon, vous avez une fuite de mémoire). Je pense que vous serez mieux de l'apprentissage des C/C++ de la mémoire notions de base avant de poursuivre.C'est une variable temporaire de sorte que la mémoire est supprimé après la fonction retourne.
Et vous retournez
result
au lieu depstrText
c'est pourquoi vous n'obtenez pas quelque chose de sensé à partir d'elle.Essayez de rafraîchir 😛
OriginalL'auteur demorge