Entwickler-Ecke
Sonstiges (.NET) - Scriptly DLL erstellen in C#
gabischatz - Sa 31.12.11 11:53
Titel: Scriptly DLL erstellen in C#
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.
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
Trashkid2000 - 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 - 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.
http://www.delphi-treff.de/tutorials/objectpascal/assemblies-erstellen/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
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 { [STAThread] static void Main(string[] args) { } const int cbVersion = 1; enum rueckgabewert { cbComplete =2, cbSelection =1, cbCancel =0 }
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); 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(); } formMain.memoSelection.Text = text.Substring(SelStart+1, SelLength); } catch (ArgumentOutOfRangeException e) { Console.WriteLine(e.Message); Console.ReadLine(); } } rueckgabeStatus = (int) rueckgabewert.cbSelection; return string.Empty; }
#region / allgemeine pluginschnittstelle /
public int pluginRueckgabetyp() { return rueckgabeStatus; } public int pluginInterfaceVersion() { return cbVersion; } public int pluginSetHandle(int AHandle) { if (AHandle != 0) { return (int) rueckgabewert.cbSelection; } else { return 0; } }
#endregion / allgemeine pluginschnittstelle / } } |
MfG. gabischatz
jaenicke - 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:
http://www.c-sharpcorner.com/UploadFile/JTeeuwen/ExportManagedCodeasUnmanaged11262005051206AM/ExportManagedCodeasUnmanaged.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 - Mo 02.01.12 08:46
Hi jaenicke,
jaenicke hat folgendes geschrieben : |
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 - Mo 02.01.12 09:09
gabischatz hat folgendes geschrieben : |
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 - 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!