Avatar billede mgsj Nybegynder
02. juni 2006 - 10:47 Der er 12 kommentarer og
1 løsning

MFC hjælp CString og LPWSTR

Hej

Jeg skal lave noget til eksisterende MFC applikationer, men synes godt nok det er svært at komme ordentlig ind i og få overblik over. MSDN er ikke til den store hjælp synes jeg.

Nogen der har en god tutorial eller lign.? Evt. en bog?

Desuden har jeg et konkret spørgsmål.

Jeg har et problem:

cannot convert parameter 1 from CString to LPWSTR

Jeg har dog prøvet at bruge CstringW istedet for CString pga. den wide char, men det afhjælper ikke problemet.

Nogen der har en løsning eller en idé til en løsning?
Det mindste fingerpeg er velkomment!
Avatar billede jpk Nybegynder
02. juni 2006 - 10:53 #1
"Programming Windows with MFC" af Jeff Prosise er super.

Prøv evt. at vise koden, der hvor du har ovenstående problem...
Avatar billede mgsj Nybegynder
02. juni 2006 - 11:18 #2
Tak for det hurtige svar, og ja jeg ved godt at det vil hjælpe at vise koden, men det er en større omgang. Jeg prøver lige at se om jeg kan koge det ned til noget mere konkret.
Avatar billede jpk Nybegynder
02. juni 2006 - 11:20 #3
Evt. bare linierne omkring fejlen...
Avatar billede arne_v Ekspert
03. juni 2006 - 02:14 #4
lidt googling finder følgende metode:

#include <iostream>

using namespace std;

#include <afx.h>

int main()
{
  CString s = "ABC";
  LPWSTR res = new WCHAR[s.GetLength()];
  LPTSTR tmp = s.GetBuffer(s.GetLength());
  int n = MultiByteToWideChar(CP_ACP, 0, tmp, -1, NULL, NULL);
  MultiByteToWideChar(CP_ACP, 0, tmp, -1, res, n);
  for(int i = 0; i < 3; i++) cout << res[i] << endl;
  return 0;
}
Avatar billede arne_v Ekspert
03. juni 2006 - 02:17 #5
som konverterer fra s til res
Avatar billede arne_v Ekspert
03. juni 2006 - 03:04 #6
hvis der ikke er asiatiske tegn burde følgende også virke:

#include <iostream>

using namespace std;

#include <afx.h>
#include <objbase.h>
#include <oleauto.h>
#include <wtypes.h>
#include <atlconv.h>

int main()
{
  USES_CONVERSION;
  CString s = "ABC";
  LPWSTR res = A2W(s.GetBuffer(s.GetLength()));
  for(int i = 0; i < 3; i++) cout << res[i] << endl;
  return 0;
}
Avatar billede mgsj Nybegynder
07. juni 2006 - 12:00 #7
Hej
Tak for svarene, de har begge hjulpet mig videre, så jeg vil gerne dele pointene mellem jer, 30 til jpk og 20 til arne_v. Men er ikke helt med på hvordan dette gøres?
Avatar billede arne_v Ekspert
09. juni 2006 - 02:42 #8
vi ligger begge et svar

du markerer begge navne i combo boxen inden du klikker accepterer

og svar fra mig
Avatar billede jpk Nybegynder
09. juni 2006 - 08:01 #9
Svar!
Avatar billede mgsj Nybegynder
09. juni 2006 - 09:39 #10
Sådan :-) Tak for hjælpen.
Avatar billede arne_v Ekspert
09. juni 2006 - 13:17 #11
du fik afvist JPK

jeg ligger lige et spm. til ham
Avatar billede arne_v Ekspert
09. juni 2006 - 13:18 #12
Avatar billede jpk Nybegynder
09. juni 2006 - 13:18 #13
Glem det, det er lige meget...
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