Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   MS .NET Assembly als Win32 PE-Datei compilieren ? (https://www.delphipraxis.net/73304-ms-net-assembly-als-win32-pe-datei-compilieren.html)

stefan2005 15. Jul 2006 13:56


MS .NET Assembly als Win32 PE-Datei compilieren ?
 
hi,
Microsoft .NET Assemblys, egal ob EXE oder DLL Dateien, werden ja von C#/VB.NET nach MSIL übersetzt und dann in eine spezielle .NET Assembly.
Gibt es Compiler/Tools, mit denen man MSIL-Code (oder auch C#) in echten Win32-Code comilieren kann, so dass dies ohne .NET ausführbar ist und mit bereits vorhandenen Win32-Projekten zusammenarbeiten kann ?

mfg,
stefan

DGL-luke 15. Jul 2006 13:58

Re: MS .NET Assembly als Win32 PE-Datei compilieren ?
 
Dafür müsste man erstmal das Framework nachbilden, da ja so Sachen wie generics, Windows Forms etc. nicht einfach 1:1 zu übersetzen sind. Dann wäre es möglich.

stefan2005 15. Jul 2006 14:04

Re: MS .NET Assembly als Win32 PE-Datei compilieren ?
 
hi,
ok ja stimmt.
Und wenn man das irgendwie mit der Ausführungsschicht von .NET (der Runtime) verbinden könnte.
Die übersetzt ja den MSIL Code in echten Maschinencode, dann könnte man doch das irgendwie im Arbeitsspeicher auslesen ?

mfg,
stefan

MagicAndre1981 15. Jul 2006 14:05

Re: MS .NET Assembly als Win32 PE-Datei compilieren ?
 
Zitat:

Zitat von stefan2005
hi,
Gibt es Compiler/Tools, mit denen man MSIL-Code (oder auch C#) in echten Win32-Code comilieren kann, so dass dies ohne .NET ausführbar ist und mit bereits vorhandenen Win32-Projekten zusammenarbeiten kann ?

Xenocode Postbuild 2006

Zitat:

Run anywhere: Native x86 executable generation allows your .NET application to run anywhere, with or without the Framework. (Windows 9x and NT4 targets not supported.)

Khabarakh 15. Jul 2006 14:34

Re: MS .NET Assembly als Win32 PE-Datei compilieren ?
 
Und wo steckt der Sinn dahinter :gruebel: ?

http://www.mycsharp.de/wbb2/thread.php?postid=68836#post68836
Im Prinzip lautet die Antwort kurz und knapp: NEIN!

Es gibt allerdings mindestens eine kommerzielle Lösung, die es erlaubt, die .NET-Assemblies, die sonst mit der Runtime installiert werden, direkt zur Exe zu packen. So wird zwar nicht auf .NET verzichtet, aber auf die Installation der Runtime. Solche Programmen unterliegen zudem heftigen Restriktionen. Nicht alle Anwendungen sind so zu "verpacken".

Dieses .NET durch die Hintertür führt aber zu entsprechend großen Programmen, so dass man sich das schenken kann und die Runtime gleich mit installieren kann. Das kann mittels Installer vollautomatisch geschehen. Die angesprochene Technik führt dagegegen sehr schnell zu einem höheren Platzverbrauch (Platte) als die Runtime-Version. Vom Nachteil hinsichtlich Download ganz zu schweigen. Da wird aus einer 60 kb-Anwendung ganz schnell ein 6 MB-Monster.

Meine persönliche Meinung: Wer mit der Installation von Runtimes auf PCs (!) Probleme hat, ist im falschen Business oder geistig in den 80er-Jahren stehen geblieben. Oft steht dahinter eine Pseudo-Kritik um das madig zu machen, was man nicht will oder versteht. Gerne geäußert von Programmierern, die mit modernen Entwicklungsplattformen wie .NET oder Java - die allesant runtime-basiert sind - auf Kriegsfuß stehen, und so das Haar in der Suppe gefunden haben um rumzumeckern.


[edit]
Wenn das der Sin(n) sein soll:
Zitat:

[...] und mit bereits vorhandenen Win32-Projekten zusammenarbeiten kann ?
Erstens geht das problemlos auch mit einer stino IL-Assembly und zweitens würde das Übersetzen in Maschinencode nichts verbessern.
[/edit]

stefan2005 15. Jul 2006 18:42

Re: MS .NET Assembly als Win32 PE-Datei compilieren ?
 
hi,
danke, dieses Programm scheint zwar zu funktionieren, aber ich hab gesehen, dass die Dateigröße von 4 auf 220 KB steigt und es wohl doch nicht eine ganz so gute Möglichkeit ist, in direkten Assemblercode umzuwandeln :lol:

mfg,
stefan

Elvis 15. Jul 2006 20:16

Re: MS .NET Assembly als Win32 PE-Datei compilieren ?
 
Warum gehst du nicht einfach den Weg über COM, so wie das für deinen Fall vorgesehen ist?

.Net Lib:
Delphi-Quellcode:
namespace DP.DelphiInterop;

interface
uses
  System.Runtime.*;
 
type
  [ClassInterface(ClassInterfaceType.AutoDual)]
  Sample = public class
  public
    property Miep : String read 'Miep';
  end;
 
implementation
end.
In Delphi als Type lib importiert, und dann noch eine Unit mit type aliases um die ekligen COM Namen zu verstecken:
Delphi-Quellcode:
unit uSample;

interface
uses
  DP_DelphiInterop_TLB;

type
  ISample = _Sample;
  TSample = CoSample;

implementation
end.
So wird's benutzt (CoInitialize muss aber irgendwo in der App aufgerufen werden):
Delphi-Quellcode:
uses
  uSample in 'uSample.pas';

var
  sample : ISample;
begin
  sample := TSample.Create();
 
  Writeln(sample.Miep);
end.

Bernhard Geyer 15. Jul 2006 20:30

Re: MS .NET Assembly als Win32 PE-Datei compilieren ?
 
Falls das bestehende Win32-Programm ein Delphi-Programm ist würde ich mal Manged VCL anschauen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:32 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