Laden...

C# Code in dll umwandeln

Erstellt von Renni vor 3 Jahren Letzter Beitrag vor 3 Jahren 539 Views
R
Renni Themenstarter:in
13 Beiträge seit 2021
vor 3 Jahren
C# Code in dll umwandeln

Hallo,
Ich weiß. Die Frage wurde schon ein paar mal beantwortet, meistens aber (nicht hier auf dem Forum) in c++. Ich jedenfalls möchte meine C# Klasse in eine dll umwandel/haben 😉. Ich möchte sie nämlich danach in python weiterbenutzen. Wie macht am das? Mein Code:


namespace bit_Convert
{
    public class bits
    {   
            
        private void bit(string pfad, int bit, string save_dir)
        {
            Bitmap myBitmap;
            ImageCodecInfo myImageCodecInfo;
            System.Drawing.Imaging.Encoder myEncoder;
            EncoderParameter myEncoderParameter;
            EncoderParameters myEncoderParameters;

            myBitmap = new Bitmap(pfad);

            myImageCodecInfo = GetEncoderInfo("image/tiff");

            myEncoder = System.Drawing.Imaging.Encoder.ColorDepth;

            myEncoderParameters = new EncoderParameters(1);

            // Save the image with a color depth of 24 bits per pixel.
            if (bit == 8)
            {
                myEncoderParameter = new EncoderParameter(myEncoder, 8L);
            }
            else if (bit == 16)
            {
                myEncoderParameter = new EncoderParameter(myEncoder, 16L);
            }
            else if (bit == 24)
            {
                myEncoderParameter = new EncoderParameter(myEncoder, 24L);
            }
            else if (bit == 32)
            {
                myEncoderParameter = new EncoderParameter(myEncoder, 32L);
            }
            else
            {
                myEncoderParameter = new EncoderParameter(myEncoder, 8L);
            }

            myEncoderParameters.Param[0] = myEncoderParameter;


            if (pfad.EndsWith(".png"))
            {
                myImageCodecInfo = GetEncoderInfo("image/png");
            }
            else if (pfad.EndsWith(".tiff"))
            {
                myImageCodecInfo = GetEncoderInfo("image/tiff");
            }
            else if (pfad.EndsWith(".jpg"))
            {
                myImageCodecInfo = GetEncoderInfo("image/jpg");
            }
            else if (pfad.EndsWith(".bmp"))
            {
                myImageCodecInfo = GetEncoderInfo("image/bmp");
            }
            else if (pfad.EndsWith(".gif"))
            {
                myImageCodecInfo = GetEncoderInfo("image/gif");
            }
            myBitmap.Save(save_dir, myImageCodecInfo, myEncoderParameters);
        }

        private static ImageCodecInfo GetEncoderInfo(String mimeType)
        {
            int j;
            ImageCodecInfo[] encoders;
            encoders = ImageCodecInfo.GetImageEncoders();
            for (j = 0; j < encoders.Length; ++j)
            {
                if (encoders[j].MimeType == mimeType)
                    return encoders[j];
            }
            return null;
        }
    }
}

Ich würde mich wirklich SEHR über eine Antwort freuen!

Mfg
Christian

R
Renni Themenstarter:in
13 Beiträge seit 2021
vor 3 Jahren

Bzw. Es muss keine .dll sein, solange ich sie mit python verwenden kann 🙂

2.079 Beiträge seit 2012
vor 3 Jahren

Zum Kompilieren nutzt Du am besten eine IDE wie VisualStudio oder VisualStudioCode.
Du kannst auch den Compiler direkt nutzen, auch dafür gibt's endlos viele Anleitungen online.

Das Ganze in Python zu nutzen, ist aber etwas Anderes, dazu hab ich das gefunden:
how-to-load-a-c-sharp-dll-in-python

Da steht etwas von IronPython, was eine .NET-Implementierung sein soll.
Wenn das also auch die .NET-Runtime nutzt, kann es ohne Probleme C#-DLLs nutzen, da beides in CIL kompiliert wird.
Alternativ gibt's Python.NET, was das ist und wo der Unterschied zu IronPython liegt, weiß ich nicht.
Wenn das beides keine Option ist, musst Du eine COM-Schnittstelle anbieten, das habe ich aber noch nie gemacht und weiß auch nicht, wie es geht.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

R
Renni Themenstarter:in
13 Beiträge seit 2021
vor 3 Jahren

Stichwort Unmanaged Exports. Ich probiere es gerade damit, verstehe aber nicht ganz, wie ich die dll damit erstellen kann...

R
Renni Themenstarter:in
13 Beiträge seit 2021
vor 3 Jahren

Ok, vielleicht ein bisschen komisch, aber ist es möglich eine exe Datei ( C# exe) mit argumenten aus python aufzurufen? Sprich ohne, dass der User etwas angeben muss, sondern das gleich vom Programm mitgegeben wird. Ich habe da nämlich diese bit methode und ich möchte diese Parameter übergeben, ohne, dass der User etwas eingeben muss, denn die Pfade etc. hat er schon bei der Initialisierung der Klasse mitgegeben

M
368 Beiträge seit 2006
vor 3 Jahren

exe Datei ( C# exe) mit argumenten aus python aufzurufen? Stichwort SubProcess unter Python: https://www.dotnetperls.com/subprocess-python

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉

R
Renni Themenstarter:in
13 Beiträge seit 2021
vor 3 Jahren

Es funktioniert jetzt! Danke an euch. Eine letzte frage aber noch: Ich habe in Visual studio auf release gestellt und auf den run Button geklickt, aber ich kann die Exe nur verwenden, wenn die dateien, die mit ihr im Ordner sind, mit dabei sind. Bei meiner WPF App ging das auch ohne diese...

16.835 Beiträge seit 2008
vor 3 Jahren

Wirf doch mal einen Blick in die Grundlagen, wie .NET funktioniert.
Dann siehste auch, dass Du die Dateien immer mitgeben musst.

Dass das bei WPF in Deinem Fall geklappt hat, ist reiner Zufall. Du hast vermutlich einfach nur Framework-Referenzen genutzt, die schon auf dem Zielsystem waren.
Auch bei WPF musst Du Abhängigkeiten mitgeben, wie übrigens bei jeder anderen Runtime-Technologie (.NET, Java, C++...) auch.