AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Warnung vor WinMD :(

Ein Thema von himitsu · begonnen am 16. Jan 2024 · letzter Beitrag vom 23. Jun 2025
Antwort Antwort
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.464 Beiträge
 
Delphi 12 Athens
 
#1

Warnung vor WinMD :(

  Alt 16. Jan 2024, 18:06
Delphi-Version: 12 Athens
Seit 'ner Weile befindet sich ja ein eigentlich nettes Projekt im GetIt.
siehe GetIt "Windows API from WinMD"

Microsoft stellt Metadaten (API-Definionen) in einem maschienenlesbarem Format bereit
und Embarcadero versucht daraus automatisch die Delphi-Implementationen zu übersetzen/generieren.
https://learn.microsoft.com/de-de/uw...ef/winmd-files

Viele WinAPI fehlen ja im Delphi, Andere sind extrem veraltet und dann überall hier und da auch mal Übersetungsfehler. (die leider zu oft nicht behoben werden)

Nur leider ist es aktuell nicht wirklich nutzbar,
vor allem da z.B. an extrem vielen Stellen Char anstatt AnsiChar verwendet wird, wo's SDK oder des MSDN learn.microsoft.com etwas von BYTE-Arrays reden.
Oder Integer bzw. Int64, wo es eigentlich ein NativeInt sein sollte, also vor allem bei compilerabgängigen Definitionen.

https://quality.embarcadero.com/browse/RSP-44096
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (16. Jan 2024 um 18:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.464 Beiträge
 
Delphi 12 Athens
 
#2

AW: Warnung vor WinMD :(

  Alt 4. Feb 2024, 11:14
Ich würde gern seit Tagen den schwachsinnigsten Bug melden, aber geht nicht.
Sobald die Windows.Foundation eingebunden ist, geht fast sofort garnichts mehr.

Hat überhaupt irgendjemand auch nur eine Sekunde mal reingesehn, was sie da verbockt haben?


Delphi-Quellcode:
{$REGION 'BUGFIX'}

// C:\Users\%username%\Documents\Embarcadero\Studio\23.0\CatalogRepository\WindowsAPIfromWinMD-1.0\Windows.Foundation.pas
//
// TRUE = $1 {1};
// FALSE = $0 {0};
//
// BOOL = Integer;

type
  BOOL = Winapi.Windows.BOOL;

const
  True = System.True;
  False = System.False;

{$ENDREGION}
Leider klappt das mit dem Zurückändern des BOOL natürlich nicht, da verwendete Funktionen in deren Units natürlich bereits mit dem falschen Typ deklariert wurden. (also muß direkt dort verändert werden)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 4. Feb 2024 um 11:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.464 Beiträge
 
Delphi 12 Athens
 
#3

AW: Warnung vor WinMD :(

  Alt 23. Jun 2025, 01:18
So, nachdem ich mal wieder in Versuchung war und WinMD nutzen wollte .... hab verzweifelt aufgeben müssen.
Dachte noch neues Delphi, neues Glück,
aber der dahingerotzte Scheißdreck ist ja immernoch in selbiger Version 1.0

Falsche Typen, massig Inkompatibilitäten, viele Fehler,
aber ganz Pervers war, dass Parameter als VAR deklariert wurden, und zwar auf den TYP, obwohl es ein [out] oder den Pointer des Pointer-Typen sein müsste, also ein VAR auf den Pointer, nicht auf den Typ.

Wenn die API aber einen Zeiger ausgibt, und zwar auf ein offenes Array, und nicht den "einen" Inhalt, dann geht das sowas von garnicht.


OK, es gibt inzwischen ein Delphi-Projekt, welches .Net-Debuginfos auslesen kann,
aber bevor ich selbst anfange diese auslesen und verarbeiten zu wollen, um eigene WinMD-Delphi-Header zu generieren,
dachte ich mir, ich probiere erstmal den WinMD-Exporter von Microsoft und schaue, was deren XML für mich bereitstellen,
aber irgendwie will das nichts machen.


Windows Runtime Metadata Export Tool
https://learn.microsoft.com/de-de/do...ta-export-tool

Also erstmal die BasisLib reingeworfen und (in einem leeren und beschreibbarem Verzeichnis ausgeführt)
Code:
"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\WinMDExp.exe" "C:\Windows\System32\WinMetadata\Windows.Foundation.winmd"
Zitat:
error WME1090 : Could not determine the core reference assembly. Please make sure mscorlib.dll and System.Runtime.dll
is referenced using the /reference switch.
OK, dann weiter ...
Code:
"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\WinMDExp.exe" /doc:xmldoc.xml /out:metafile.weissnicht /reference:"C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Runtime.dll" /reference:"C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll" /utf8output "C:\Windows\System32\WinMetadata\Windows.Foundation.winmd"
Zitat:
error WME1046 : Platform Attribute 'Windows.Foundation.Metadata.ActivatableAttribute' is either defined in an assembly
that is not referenced or does not have the expected constructor. Please ensure that your assembly references include
the .NET Framework and Windows Runtime platform assemblies, such as System.Runtime.dll and Windows.winmd.
Hmmmm, aber jetzt weiß ich auch erstmal nicht mehr weiter
und das Internet zeigt auch keine Lösungswege auf, bzw. kaum jemand scheint das mal versucht zu haben, oder niemand hat Probleme damit.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (23. Jun 2025 um 01:22 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.208 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Warnung vor WinMD :(

  Alt 23. Jun 2025, 13:27
ich weiß zwar noch nichtmal, was WinMD ist, aber hier taucht auch grade (auf Mondsprache) etwas auf der gegenüberliegenden Seite der Delphi-Praxis auf:

https://en.delphipraxis.net/topic/13...o-can-clarify/
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.464 Beiträge
 
Delphi 12 Athens
 
#5

AW: Warnung vor WinMD :(

  Alt 23. Jun 2025, 15:11
Warum steht in dem ScreenShot "Oggi"?
Ich bin mir fast sicher, dass das von mir stammt.
[edit] Ahhhhh, "oggi" heißt "gestern" "heute"
und in der Großansicht ist das schwarze "Nameübermalen" sichtbar (nicht in der kleinen Vorschau)


WinMD = Windows-MetaData-Files (Windows-Metadatendateien)
https://learn.microsoft.com/de-de/uw...ef/winmd-files

Windows bringt die Definition seiner eigenen WinAPI mit,
welche man nutzen kann, z.B. Visual Studio, um Import-Interfaces zu generieren.
C:\Windows\System32\WinMetadata\*.winmd

Kann man auch für andere Programme nutzen, z.B. MS-Office bringt auch seine API-Definition mit.

Emba hatte doch bestimmt auch auch die HeaderFiles für's WinRT darüber generiert. (Bluetooth, NotificationCenter usw.)
Halt nee, dafür nutzen die ihren C2Delphi-Headerübersetzer, welcher Delphi beiliegt, aber für uns nicht nutzbar ist.



Und wir können es nutzen, um daraus die HeaderFiles für's Delphi zu generieren,
was das WinMD-Projekt im GetIt versucht hat. (leider nur bissl beschissen)






PS: Genauso stellt Microsoft auch einen Debug-Server bereit, wo die Debuginfos der DLLs vom Windows bereitgestellt werden.
Nimmt man die und wandelt sie in TDS um, dann könnte Delphi beim Debuggen auch den Stacktrace der Windows-DLLs aufbauen.
z.B. viele Debugger für C++ können sowas.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (23. Jun 2025 um 15:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von blawen
blawen

Registriert seit: 30. Nov 2003
Ort: Luterbach (CH)
704 Beiträge
 
Delphi 12 Athens
 
#6

AW: Warnung vor WinMD :(

  Alt 23. Jun 2025, 15:15
Warum steht in dem ScreenShot "Oggi"?
Ich bin mir fast sicher, dass das von mir stammt.
Oggi steht vermutlich für Heute (italienisch?)
Roland
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz