Autor Beitrag
gabischatz
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Sa 31.12.11 11:53 
Hallo alle zusammen... :D

Ich bin neu hier und brauche eure Hilfe bei einem Programm... :D
Als erstes möchte ich darauf hinweißen, dass ich absoluter Neuling bin in C#.
Ich habe ein, zwei kleinere Sachen schon in AutoIT geschrieben. In AutoIT lassen sich aber noch keine DLL´s erstellen und so habe ich mir Visual Studio installiert.
Nun zur eigentlichen Sache, ich wollte erst einmal ein Delphi-Beispiel von Benedikt Loepp (Scriptly)in C# umsetzen.
Ich habe einfach mal die Original-Delphi-Dateien und C# Test-Dateien angehangen.
Vielleicht findet jemand die Zeit um die DLL zum laufen zu bringen.
Damit man die DLL unter Scriptly testen kann, braucht man eine gleichnamige dat-Datei mit folgenden Inhalt.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
[de]
Name=Wrapper
Hint=Text ersetzen
[en]
Name=Wrapper
Hint=replace text

Die Dateien liegen je nach Installierter-Version entweder unter (Compact-Version) C:\Programme\Webocton - Scriptly\plugins
oder im Ordner C:\Dokumente und Einstellungen\Benutzername\Anwendungsdaten\Webocton - Scriptly\plugins in der Standard-Version.
Original-Delphi-Dateien und C# Test (zip, 507.31 KB)
Ich hoffe es kann mir Jemand helfen.
Mit freundlichen Grüßen und ein guten Rutsch
gabischatz
Einloggen, um Attachments anzusehen!
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: So 01.01.12 19:07 
Hallo,
also habe mir das Ganze mal angeschaut. Bist Du denn sicher, dass es mit einer Assembly funktionieren sollte? Ich meine, weil es ja kein nativer Code ist. Habe keine Informationen dazu gefunden, so ein Plugin in C# zu schreiben.

Plugin-Unterstützung von Scriptly:
Unterstützt werden dabei Plugins für die Editoren Phase 5, Weaverslave sowie das Plugin-System EPS.
gabischatz Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mo 02.01.12 00:23 
Hi Trashkid2000,
ich wollte es einfach mal ausprobieren ob ich dies in C# nachstellen kann.
Schau dir mal nachfolgenden Link an. www.delphi-treff.de/...stellen/einfuehrung/
Es ist aber nicht so einfach, wie ich mir das vorgestellt habe.
Ich stehe gerade an einem Problem welches ich irgendwie nicht lösen kann.
Wie weiße ich aus der main.cs der TformMain.cs an labelSel.text = "Der Cursor im Editor war auf Position " + SelStart.ToString(); zu setzen?

Meine jetzige main.cs
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Diagnostics;
using System.Collections.Generic;


namespace ScriptlyWrapper
{
    public class main
    {
       /// <summary>
        /// Der Haupteinstiegspunkt für die Anwendung.
        /// </summary>
        [STAThread]
         static void Main(string[] args)
        {
 
        }
                        //Die folgende Funktion ist die eigentliche Kernfunktion des Plugins,
                        //und damit auch die wichtigste für Pluginentwickler!
                        //Hier kann beliebiger Code stehen, der entweder den kompletten
                        //oder nur den markierten Text im Editor ersetzt.

                        //Parameter die der Editor übergibt:
                        //Text          :       Enthõlt den kompletten Text aus dem Editor
                        //                      Ist vom Typ: PChar

                        //SelStart      :       Cursorposition im Editor, oder falls Text markiert
                        //                      ist, die Startposition der Markierung.
                        //                      Entspricht der Delphifunktion TMemo.SelStart
                        //                      Ist vom Typ: Integer bzw. Int

                        //SelLength     :       Lõnge der Markierung.
                        //                      Falls kein Text markiert ist diese Variable 0.
                        //                      Entspricht der Delphifunktion TMemo.SelLength
                        //                      Ist vom Typ: Integer bzw. Int

                        //Der Rückgabewert der Funktion ist ein String vom Typ PChar.
                        //Dieser Schritt wurde aus Gründen der Plugin-Kompatibilität zu C++ etc.
                        //gemacht.
        const int cbVersion = 1;
        enum rueckgabewert
        {
            cbComplete          =2//Bedeutet, das der komplette Text im Editor ersetzt werden soll.
            cbSelection         =1//Bedeutet, das nur der markierte Text im Editor ersetzt werden soll.
            cbCancel            =0  //Bedeutet, das die Aktionen des Plugins abgebrochen wurden und nichts im Editor geõndert wird.
        }

        int rueckgabeStatus = 3;
       
        public string pluginStart(string text, int SelStart, int SelLength )
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Form formMain = new TformMain();
            if (formMain != null)
            {
                 try
                 {
                    Application.Run(formMain);
                            //setMemoText (text,SelStart, SelLength); 
                    if (SelLength == 0)
                    {
                        formMain.labelSel.text = "Der Cursor im Editor war auf Position " + SelStart.ToString();
                    }else{
                        formMain.labelSel.text = "Die Markierung im Editor ging von " + SelStart.ToString() + " bis " + (SelStart + SelLength).ToString();
                    }
                     //Markierter Text
                    formMain.memoSelection.Text = text.Substring(SelStart+1, SelLength);
                 }
                 catch (ArgumentOutOfRangeException e)
                 {
                     Console.WriteLine(e.Message);
                     Console.ReadLine();
                 }
            } 
    
    
        rueckgabeStatus = (int) rueckgabewert.cbSelection;
            return string.Empty;
           // return "neuer Text";
        } 

  #region / allgemeine pluginschnittstelle    /

        public int pluginRueckgabetyp()
        {
            return rueckgabeStatus;
        }
        //Diese Funktion ist aus Kompatibilitätsgründen notwendig
        public int pluginInterfaceVersion() { return cbVersion; }
        //Diese Funktion funktioniert nur, wenn das Plugin mit dem Scriptly
        //zusammen verwendet wird.
        //Sie dient dazu, das Formular korrekt anzusprechen und einzuordnen
        public int  pluginSetHandle(int AHandle)
        {
            //Application.Handle = AHandle;
            //if (Application != null)
            if (AHandle != 0)
                {
              return (int) rueckgabewert.cbSelection;  
            }
            else
            {
                return 0;
            }
       }

 #endregion / allgemeine pluginschnittstelle    /
     }
    
}

MfG. gabischatz
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 02.01.12 01:09 
Du versuchst hier den (mindestens) zweiten Schritt vor dem ersten...

Der erste Schritt wäre, dass die DLL überhaupt erst von Scriptly aufgerufen wird. Und das wird so mit einer C#-DLL nicht funktionieren, denn anders als mit Prism kann man mit C# keine DLLs schreiben, die von unmanaged Programmen so einfach nutzbar sind. In Prism schreibt man einfach das Attribut UnmanagedExport vor die Methode und schon kann man diese ganz normal wie jede exportierte Funktion unmanaged aufrufen. In C# geht das so nicht. Theoretisch kann man das manuell machen, siehe hier:
www.c-sharpcorner.co...CodeasUnmanaged.aspx
Das ist aber ziemlich kompliziert.

Deshalb hast du dir wohl mit C# leider die falsche Sprache für den Zweck ausgesucht...
Delphi, Prism, C++ nativ, ... würde alles gehen.
gabischatz Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mo 02.01.12 08:46 
Hi jaenicke,
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:

Deshalb hast du dir wohl mit C# leider die falsche Sprache für den Zweck ausgesucht...
Delphi, Prism, C++ nativ, ... würde alles gehen.

Danke für deine offenen Worte. Da hätte ich noch lange Doktorn können :D
Hatte mich gerade etwas mit C# angefreundet, ist Schade, muss ich mich wohl doch mit Delphi einlassen.
Kann mir jemand einen Kostenlosen, guten Delphi Editor nennen?
Möchte nicht erst einige ausprobieren, wenn es überhaupt welche gibt.
MfG. gabischatz
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 02.01.12 09:09 
user profile icongabischatz hat folgendes geschrieben Zum zitierten Posting springen:

Kann mir jemand einen Kostenlosen, guten Delphi Editor nennen
Es gibt leider keinen. Wenn es kostenlos sein muss, rate ich dir zu Lazarus. Das kommt zwar in keinster Weise an den Komfort und die Funktionen von Delphi heran, ist dafür aber kostenlos. Für deine Zwecke sollte es vollkommen ausreichen. ;-)
gabischatz Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mo 02.01.12 09:52 
Danke für deine schnelle Antwort. Ist so wie ich es schon vermutet hab, leider :oops:
Mal ein rein hypothetische Frage: Ist es Möglich eine Delphi dll zuschreiben die ich in
C# weiterverarbeite und eine weitere die dann die Werte an Scriptly zuruck gibt?
MfG
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 02.01.12 12:57 
Den beschriebenen Weg hat natürlich jemand (= Robert Giesecke) schon längst automatisiert, womit es in keiner .NET-Sprache schwieriger als in Prism ist ;) : sites.google.com/sit...eforunmanagedexports

_________________
>λ=