Autor Beitrag
3marci
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 61
Erhaltene Danke: 5

Windows 7 / Kubuntu 11.04
C# / vb.net / php / progress (VS 2010 Express / SharpDevelop / NetBeans / proAlpha)
BeitragVerfasst: Mo 30.05.11 23:14 
Gibt es eine Möglichkeit eine Javascript-Datei (.js) in ein Projekt einzubinden?
Ich möchte dann eine die Funktionen der JS-Datei in csharp aufrufen... also ausführen.
Die Funktion der JS-Datei gibt einen String zurück den ich wieder in c# haben will (um damit zu arbeiten).
thepaine91
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 763
Erhaltene Danke: 27

Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
BeitragVerfasst: Di 31.05.11 09:24 
Warum sollte man sowas tun? :O
Habe aber mal Google bemüht und nach geschätzten 2 Minuten eine Lösung erhalten.
3marci Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 61
Erhaltene Danke: 5

Windows 7 / Kubuntu 11.04
C# / vb.net / php / progress (VS 2010 Express / SharpDevelop / NetBeans / proAlpha)
BeitragVerfasst: Mi 01.06.11 20:33 
user profile iconthepaine91 hat folgendes geschrieben Zum zitierten Posting springen:
Warum sollte man sowas tun? :O
Habe aber mal Google bemüht und nach geschätzten 2 Minuten eine Lösung erhalten.


Da du fragst, wieso man so was tun sollte, nehme ich auch gleich mal an dass du dir die gefundenen Beiträge nicht durchgelesen hast.
Klar, "csharp javascript" bringt bei mir auch 87 Millionen Treffer, aber an der Qualität der Funde ist einfach nur schecht und dazu noch veraltet.
Ich denke man kann so ziemlich alles Googlen, warum schliessen wir das Forum nicht einfach!?
Kannst du wenigstens die Treffer linken, Google gibt nicht bei jedem das selbe aus... Danke.

@all others
Wenn jemand einen Lösungsansatz hat bitte posten, danke schön. :wink:
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Do 02.06.11 09:35 
Hi,
user profile iconthepaine91 hat folgendes geschrieben Zum zitierten Posting springen:
Warum sollte man sowas tun? :O
Habe aber mal Google bemüht und nach geschätzten 2 Minuten eine Lösung erhalten.
Naja, habe auch mal geschaut, aber das Ganze ist nun wirklich nicht so einfach. Also mit 2 Minuten war es sicher nicht getan!
user profile icon3marci hat folgendes geschrieben:
Ich denke man kann so ziemlich alles Googlen, warum schliessen wir das Forum nicht einfach!?
Also bei manchen Fragen denke ich auch, dass es einfacher wäre, mal Google zu bemühen, als hier einen Thread aufzumachen. Aber nicht bei solch speziellen Fragen.

Um mal eine Seite zu nennen, die sehr hilfreich war:odetocode.com/code/80.aspx

Hier also der Code mit schon etwas Fehlerbehandlung. Du musst Deinem Projekt einen Verweis auf "Microsoft.JScript" hinzufügen.
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:
var jsCodeProvider = new JScriptCodeProvider();
var parameters = new CompilerParameters() 
{
  GenerateInMemory = true,
  GenerateExecutable = true
};

string jsCode =
@"function SendHallo()
  {
    return 'Hallo';
  }"
;
var results = jsCodeProvider.CompileAssemblyFromSource(parameters, jsCode);
if (results.Errors.HasErrors)

  //Fehler aufgetreten
}
else if (results.Errors.HasWarnings)
{
  //Warnungen aufgetreten
}
else
{
  var assembly = results.CompiledAssembly;
  var compiledType = assembly.GetTypes().FirstOrDefault();
  if (compiledType != null)
  {
    var sendHalloMetodInfo = compiledType.GetMethod("SendHallo");
    if (sendHalloMetodInfo != null)
    {
      var instance = FormatterServices.GetUninitializedObject(compiledType);
      string returnValue = (string)sendHalloMetodInfo.Invoke(instance, new object[] { nullnull });
    }
  }
}
Achso, die Signatur der Methode wird irgendwie geändert, wie man sieht. Aus keinem Übergabeparameter werden hier zwei (deshalb das 2x null). Darauf muss geachtet werden.
Viel Spaß damit,

Für diesen Beitrag haben gedankt: 3marci