Avatar billede stigc Nybegynder
14. juni 2004 - 20:58 Der er 19 kommentarer og
2 løsninger

MFC og Visual C++

Jeg er ny med Microsofts MFC. Jeg skal bl.a. lave en række http kald i en desktop application. jeg har lave en simpel win32 dialog .exe med MFC linket dynamsik. Jeg kan bl.a. skrive (f.eks i funktionen for en knap)

CString test = "test";

og det kompiler fint. Men bruger jeg andre C... objekter (som jeg kan vælge fra code complition) så opstår der kompilerfejl med "uknown identifyer". F.eks:

CHttpConnection *P;

Hvad mangler jer?
Avatar billede arne_v Ekspert
14. juni 2004 - 21:01 #1
inkluderer du afx.h ?
Avatar billede bertelbrander Novice
14. juni 2004 - 21:24 #2
Avatar billede stigc Nybegynder
14. juni 2004 - 21:24 #3
Jeg har ikke koden lige her. Men det gør jeg vel, for ellers ville CString vel ikke virke. Eller hvad?
Avatar billede arne_v Ekspert
14. juni 2004 - 21:29 #4
Jeg tror at Bertel har ret

Den kræver explicit afxinet.h
Avatar billede stigc Nybegynder
14. juni 2004 - 22:41 #5
Ja selvfølgelig. Nu kompiler det fint.

Hvad bruger man i VC++ til at håndtere dynamiske arrays. I java bruger jeg ByteArrayOutputStream, og jeg har fundet http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_MFC_CByteArray.asp som ligner det samme. Men hvordan lægger jeg et almidelig byte array ned i denne struktur?
Avatar billede arne_v Ekspert
14. juni 2004 - 22:45 #6
Du kan ihvertfald kalde Add med en BYTE.
Avatar billede stigc Nybegynder
14. juni 2004 - 22:47 #7
Ja den har jeg fundet, men man bruger den jo gerne med en buffer på f.eks. 1024 bytes.
Avatar billede arne_v Ekspert
14. juni 2004 - 22:51 #8
Du kalder CByteArray constructur uden argumenter, du kalder Add gentagne gange
for at tilføje bytes, du kalder GetData for at få det færdige resultat.

Ligesom du i Java kalder ByteArrayOutputStream constructor kun med størrelsen,
kalder diverse write for at tilføje bytes og kalder toByteArray for at hente
det færdige resultat.
Avatar billede bertelbrander Novice
14. juni 2004 - 22:52 #9
Jeg foretrækker at bruge standard C++ metoderne, i dette tilfælde std::vector:

#include <vector>
#include <iostream>
#include <algorith>

int main(void)
{
  std::vector<char > DynArray;
  char NormalArray[4] = {0, 2, 4, 6};

  DynArray.assign(&NormalArray[0], &NormalArray[4]);

  for(std::vector<char >::size_type i = 0; i < DynArray.size(); i++)
    std::cout << int(DynArray[i]) << std::endl;

  DynArray.push_back(90);
  DynArray.push_back(10);

  for(std::vector<char >::size_type i = 0; i < DynArray.size(); i++)
    std::cout << int(DynArray[i]) << std::endl;

}
Avatar billede stigc Nybegynder
14. juni 2004 - 23:05 #10
arne_v>> Ja, men java har en write som tager et array af bytes. Nå, men jeg looper den selv ind. Tak skal i have for hjælpen. Læg et svar.
Avatar billede jpk Nybegynder
15. juni 2004 - 08:37 #11
Du kan få en pointer til CByteArray's interne buffer via GetData funktionen.
Men husk at sætte størrelsen først!

BYTE b[] = "ABCDEFGHIJ";
CByteArray ByteArray;
ByteArray.SetSize(10);
BYTE* pB = ByteArray.GetData();
memcpy(pB, &b, 10);
Avatar billede jpk Nybegynder
15. juni 2004 - 08:45 #12
Strengt taget skal det være:
memcpy(pB, &b, 10 * sizeof(BYTE));
Avatar billede arne_v Ekspert
15. juni 2004 - 08:47 #13
Hvis Microsoft nogensinde ændrer BYTE til ikke at være 1 byte, så tror jeg at
der er mange som vil føle sig noget vildledt ...

:-)
Avatar billede jpk Nybegynder
15. juni 2004 - 08:57 #14
Måske, men på trods af det så bruger implementationen af CByteArray sizeof ved ALLE memcpy, så...
Avatar billede stigc Nybegynder
15. juni 2004 - 09:44 #15
I bliver ved, og det er jeg glad for. J

eg har lige et tillægs-tillægs spørgsmål. Jeg syntes at kompileren behandler en byte og en char ens. Er der rigtigt? Jeg er vant til f.eks. fra Java at arbejde med bytes og bruge en decoding når jeg omformer til en streng. Hvordan laver jeg et byte array om til en CString med f.eks ISO-88559-1 eller UTF-8?
Avatar billede arne_v Ekspert
15. juni 2004 - 09:46 #16
C/C++ byte = C/C++ char = Java byte
C/C++ wchar_t = Java char
Avatar billede stigc Nybegynder
15. juni 2004 - 18:36 #17
Hvad med jer andre? Læg et svar. En/decoding - nogen der ved noget om det?
Avatar billede arne_v Ekspert
15. juni 2004 - 18:40 #18
ok
Avatar billede arne_v Ekspert
15. juni 2004 - 18:40 #19
en/decoding af hvad ?
Avatar billede arne_v Ekspert
01. juli 2004 - 21:51 #20
Tid at få afsluttet spørgsmålet ?
Avatar billede stigc Nybegynder
01. juli 2004 - 22:01 #21
Ja, og tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester