Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   inkompatible Typen Widechar und Char (https://www.delphipraxis.net/164787-inkompatible-typen-widechar-und-char.html)

Lyan 29. Nov 2011 19:48

Delphi-Version: 5

inkompatible Typen Widechar und Char
 
Hallo,

wie muss ich das denn /'Conventieren/', dass die fehlermeldung den Geist aufgibt? ;)

Delphi-Quellcode:
function LoadURL(URL: String): String;
var
  IOpen, IURL: HINTERNET;
  Read: Cardinal;
  Msg: string;
begin
  Result := '';
  try
   IOpen := InternetOpen('Okay!',INTERNET_OPEN_TYPE_PRECONFIG, '', '',INTERNET_FLAG_NEED_FILE);
    if IOpen <> nil then
    try
      [U]IURL := InternetOpenUrl(IOpen, PWideChar(URL), nil, 0,INTERNET_FLAG_DONT_CACHE, 0);[/U]
      if IURL <> nil then
      try
        SetLength(Msg, 4096);
        repeat
           if InternetReadFile(IURL, @Msg[1], 4096, Read) then
            Result := Result + Copy(Msg, 1, Read)
          else
            Break;
        until Read = 0;
      finally
        InternetCloseHandle(IURL);
      end;
    finally
      InternetCloseHandle(IOpen);
    end;
  except
  end;
end;

// EDIT: Hab PwideChar durch PAnsiChar ersetzt... aber hab nur geraten :D Gibts da trotzdem Probleme, bzw. kann es zu Problemen kommen?

Bummi 29. Nov 2011 19:59

AW: inkompatible Typen Widechar und Char
 
Unter Delphi < 2009 richtig geraten ...

DeddyH 30. Nov 2011 08:01

AW: inkompatible Typen Widechar und Char
 
Wieso nicht einfach PChar? Damit wäre das bis Delphi 2007 automatisch PAnsiChar, danach dann PWideChar.

himitsu 30. Nov 2011 08:46

AW: inkompatible Typen Widechar und Char
 
Zitat:

Zitat von DeddyH (Beitrag 1138528)
Wieso nicht einfach PChar? Damit wäre das bis Delphi 2007 automatisch PAnsiChar, danach dann PWideChar.

Jupp, MSDN-Library durchsuchenInternetOpenUrl ist nunmal die "dynamische" Version von Delphi, welche sich ans System anpaßt
und diese ist mit PChar deklariert, also muß man auch PChar verwenden.
Außerdem hast du auch den dynamischen Delphi-Referenz durchsuchenString verwendet, welcher ebenfalls nach einem PChar schreit.



1.
Wenn möglich, dann nachsehn, wie es im Delphi deklariert wurde.
(wenn man über die VCL-Quellcodes verfügt)

2.
Nachsen wie es im MSDN deklariert ist.
MSDN-Library durchsuchenInternetOpenUrl
Die WinAPI kenn also kein InternetOpenUrl.
Zitat:

Requirements

Unicode and ANSI names: InternetOpenUrlW (Unicode) and InternetOpenUrlA (ANSI)
3.
Anhand der "richtigen" Deklaration die passenden Parameter verwenden.

InternetOpenUrl + PChar + String
InternetOpenUrlA + PAnsiChar + AnsiString
InternetOpenUrlW + PWideChar + WideString (seit 2009 auch mit UnicodeString möglich)
Fällt dir was auf?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz