Appels API

  • aasim
  • Born
  • Born
  • No Avatar
  • Inscription: Fév 01, 2004
  • Messages: 2
  • Loc: india
  • Status: Offline

Message Février 1st, 2004, 11:05 am

Le problème que je fais face est que je veux avoir accès à certains appels d'API à partir de VC + + dans Windows 2000 Server
J'ai écrit le code suivant.
Code: [ Select ]
#include<stdio.h>
#include<windows.h>
void main()
{    
    int temp;
    LPSTR ipbuffer=" ";
    DWORD sizeBuff=30;
    temp=GetUserName(ipbuffer,&sizeBuff);
    printf("%s",ipbuffer);
}
  1. #include<stdio.h>
  2. #include<windows.h>
  3. void main()
  4. {    
  5.     int temp;
  6.     LPSTR ipbuffer=" ";
  7.     DWORD sizeBuff=30;
  8.     temp=GetUserName(ipbuffer,&sizeBuff);
  9.     printf("%s",ipbuffer);
  10. }


il me donne une erreur disant
L'instruction à "x077f8c72c« mémoire referneced à "0x0041f01c". La mémoire ne peut pas être "written".
Cliquez sur OK pour termintate
Clicke Debug pour déboguer le programme


S'il vous plaît quelqu'un pourrait-il m'expliquer pourquoi cette erreur se produit.
Comment puis-je procéder. La même API fonctionne bien en VB.

si je change le
DWORD sizeBuff = 6
puis il renvoie une erreur code122

S'il vous plaît aider
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Février 1st, 2004, 11:05 am

  • Lieven
  • Beginner
  • Beginner
  • Avatar de l’utilisateur
  • Inscription: Jan 04, 2004
  • Messages: 57
  • Loc: Belgium
  • Status: Offline

Message Février 2nd, 2004, 4:25 am

API dans votre appel, vous devez utiliser & ipbuffer depuis otherwiste la fonction ne peut pas mettre quelque chose en elle...

Im pas sûrs à 100% depuis Ive jamais utilisé ceux de l'intérieur C + +, mais à première vue, il devrait faire l'affaire
  • alvin
  • Born
  • Born
  • No Avatar
  • Inscription: Fév 07, 2004
  • Messages: 2
  • Status: Offline

Message Février 7th, 2004, 2:54 pm

Vous avez à préparer un espace de mémoire tampon, de sorte que GetUserName () peut stocker des données dans le buffer.


Rewrite comme ceci:

......

int temp;
TCHAR ipbuffer [30];
DWORD sizeBuff = 30;
temp = GetUserName (ipbuffer, & sizeBuff);

......



Et dans votre code original, le ipbuffer a été fait dans une chaîne constante.
Comme il est constant de données, de sorte que certaines compilateur serait le mettre dans un non-inscriptible page. Si aucune instruction essayer de modifier les données dans la page, telles que la fonction veut mettre le nom dans l'adresse en mémoire, elle cause de l'erreur.

- Alvin

Afficher de l'information

  • Total des messages de ce sujet: 3 messages
  • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 233 invités
  • Vous ne pouvez pas poster de nouveaux sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas éditer vos messages
  • Vous ne pouvez pas supprimer vos messages
  • Vous ne pouvez pas joindre des fichiers
 
 

© 2011 Unmelted, LLC. Ozzu® est une marque déposée de Unmelted, LLC