Discussion:
.NET Objekt an ein VBScript übergeben
(zu alt für eine Antwort)
Roland Schumacher
2010-05-12 13:08:29 UTC
Permalink
Hallo

Wir migrieren zur Zeit eine alte VB6 Anwendung nach .NET (C#). Bei der
alten Anwendung sind sehr viele VBScripte im Einsatz die wir nicht so
ohne weiteres zum jetzigen Zeitpunkt migrieren können. VB6 hat dabei
ein Objekt an ein Script übergeben, das Script hat dieses Objekt
verarbeitet und danach konnte VB6 mit dem Objekt weiter arbeiten.

Das will/muss ich nun mit C# nachbauen.

Ich habe ein .NET Objekt (COM Visible) das ich an ein VBScript
übergeben sollte, das Script bearbeitet dieses und ich kann es dann in
der C# Anwendung weiter nutzen.

Ein .NET Object im VBScript zu bearbeiten ist keine grosse Sache. Aber
wie bekomme ich ein .NET Objekt ins VBScript?

Gruss
Roland
Holger Boskugel
2010-05-12 13:46:20 UTC
Permalink
Hallo Roland,
Post by Roland Schumacher
Ein .NET Object im VBScript zu bearbeiten ist keine grosse Sache. Aber
wie bekomme ich ein .NET Objekt ins VBScript?
wie ist denn so ein Script aufgebaut? Nutzt es "globale" (COM-)Objekte
(analog WScript) oder instanziiert Ihr das Objekt erst mit
CreateObject()?


Gruss

Holger
--
http://www.vbwebprofi.de
FrankDzaebel
2010-05-12 15:49:42 UTC
Permalink
Hallo Roland,
Post by Roland Schumacher
Ich habe ein .NET Objekt (COM Visible) das ich an ein VBScript
übergeben sollte, das Script bearbeitet dieses und ich kann es dann in
der C# Anwendung weiter nutzen.
Ein .NET Object im VBScript zu bearbeiten ist keine grosse Sache. Aber
wie bekomme ich ein .NET Objekt ins VBScript?
In VBS mit "CreateObject" mit der ProgID des .NET Objektes.
Das .NET Objekt erstellst Du mit folgender Technik:

[COM-Interop Teil 2: C#-Serverlernprogramm (C#)]
http://msdn.microsoft.com/de-de/library/aa288456(VS.71).aspx

[Com Interop ein Classmember ansprechen in C#]
http://www.eggheadcafe.com/software/aspnet/33182586/com-interop-ein-classmemb.aspx

Aber:

[CA1408: AutoDual ClassInterfaceType nicht verwenden]
http://msdn.microsoft.com/de-de/library/ms182205.aspx

Deswegen ggf. etwas wie:

[Guid("BE5E0B60-F855-478E-9BE2-AA9FD945F177")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ICriteria
{
[DispId(1)]
int ID { get; set; }
[DispId(2)]
string RateCardName { get; set; }
[DispId(3)]
string ElectionType { get; set; }
}


[Guid("3023F3F0-204C-411F-86CB-E6730B5F186B")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("DeinNameSpace.Criteria")]
public class Criteria : ICriteria
{
public int ID { get; set; }
public string RateCardName { get; set; }
public string ElectionType { get; set; }
}


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET
Roland Schumacher
2010-05-14 06:42:29 UTC
Permalink
Hallo

Es war dann eigentlich einfacher als gedacht.
Stichwort ist: Microsoft Script Control 1.0

Und hier ist ein Beispiel: http://blog.geniali.ch/post/2010/05/14/NET-Object-to-VBScript-to-NET.aspx

Danke für die Antworten.

Gruss
Roland Schumacher
FrankDzaebel
2010-05-14 07:47:04 UTC
Permalink
Hallo Roland,
Post by Roland Schumacher
Microsoft Script Control 1.0
so kompliziert hättest Du es gar nicht machen müssen.

Du brauchst das Script Control gar nicht.
Deine Frage scheint auch eher gewesen zu sein:
"wie kann ich von .NET aus ein Script aufrufen, dass
mir meine .NET Methode ausführt", o.ä.:

[CS-Script]
http://www.csscript.net/

[C# Script]
http://csscript.codeplex.com/

[Dynamic Compilation - Using .NET to make your Application Scriptable]
http://www.developerfusion.com/article/4529/using-net-to-make-your-application-scriptable/3/

[C# Scripting]
http://www.trelford.com/blog/post/C-Scripting.aspx

Mit letzterem kannst Du sogar eine richtige kleine IDE
erzeugen, die Dir ggf. sogar genau die Stelle anzeigt, wo
evtl. Syntax-Fehler vorhanden sind (mit entsprechender
Beschreibung und Grund). Das kann alles .NET von Hause aus.


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET
Roland Schumacher
2010-05-14 08:10:00 UTC
Permalink
Post by Holger Boskugel
Hallo Roland,
Post by Roland Schumacher
Microsoft Script Control 1.0
so kompliziert hättest Du es gar nicht machen müssen.
Du brauchst das Script Control gar nicht.
"wie kann ich von .NET aus ein Script aufrufen, dass
[CS-Script]http://www.csscript.net/
[C# Script]http://csscript.codeplex.com/
[Dynamic Compilation - Using .NET to make your Application Scriptable]http://www.developerfusion.com/article/4529/using-net-to-make-your-ap...
[C# Scripting]http://www.trelford.com/blog/post/C-Scripting.aspx
Mit letzterem kannst Du sogar eine richtige kleine IDE
erzeugen, die Dir ggf. sogar genau die Stelle anzeigt, wo
evtl. Syntax-Fehler vorhanden sind (mit entsprechender
Beschreibung und Grund). Das kann alles .NET von Hause aus.
ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]http://Dzaebel.NET
Hallo Frank

Danke für diese Hinweise. Das die Scripte dann mal auf z.b. C#
migriert werden ist in der Phase 2 angedacht. Zur Zeit MUSS ich sie
aber in VBScript belassen.
Deine Antworten beziehen sich jetzt aber immer auf C# Script Lösungen.
Das finde ich cool. Werde ich sicher mal brauchen. Aber JETZT muss ich
sie in VBScript ausführen.
Für das habe ich keine andere Lösung gefunden. Du?

Gruss
Roland Schumacher
Günter Prossliner
2010-05-14 10:02:05 UTC
Permalink
Hallo Roland!
Aber JETZT muss ich sie in VBScript ausführen.
Für das habe ich keine andere Lösung gefunden. Du?
Prinzipiell wäre die Methode über das "Microsoft Script Control" schon
richtig. Funktioniert das nicht, oder gefällt es dir nicht?

Zur Verwendung des Script-Controls:

[Visual Programmer: Add Scripting to Your Apps with Microsoft ScriptControl]
http://msdn.microsoft.com/en-us/magazine/cc302278.aspx


Man könnte auch "tiefer" reingehen, und das machen was das Script Control
macht, nämlich primär IActiveScriptSite zu implementieren, und den
Script-Engine (VBScript in Deinem Fall) selbst instanzieren:

Dazu ein paar Links:

[IActiveScriptSite]
http://msdn.microsoft.com/en-us/library/z70w3w6a(VS.85).aspx

Sehr grundlegend, mit Hintergrund-Infos:
[Visual Programmer, MSJ October 1999]
http://www.microsoft.com/msj/1099/Visualprog/visualprog1099.aspx


Die [ComImport] Definitionen für IActiveScriptXXX:
[C# Interfaces for the Windows Scripting Host - CodeProject]
http://www.codeproject.com/KB/cs/ZetaScriptingHost.aspx


Noch ein Blog dazu:
[Den Microsoft Scripting Host in C# verwenden - Magerquark.de]
http://blog.magerquark.de/2006-06/den-microsoft-scripting-host-in-c-verwenden/



GP
GENiALi alias Roland Schumacher
2010-05-14 10:46:31 UTC
Permalink
Post by Günter Prossliner
Hallo Roland!
Aber JETZT muss ich sie in VBScript ausführen.
Für das habe ich keine andere Lösung gefunden. Du?
Prinzipiell wäre die Methode über das "Microsoft Script Control" schon
richtig. Funktioniert das nicht, oder gefällt es dir nicht?
[Visual Programmer: Add Scripting to Your Apps with Microsoft ScriptControl]http://msdn.microsoft.com/en-us/magazine/cc302278.aspx
Man könnte auch "tiefer" reingehen, und das machen was das Script Control
macht, nämlich primär IActiveScriptSite zu implementieren, und den
[IActiveScriptSite]http://msdn.microsoft.com/en-us/library/z70w3w6a(VS.85).aspx
    [Visual Programmer, MSJ October 1999]
   http://www.microsoft.com/msj/1099/Visualprog/visualprog1099.aspx
    [C# Interfaces for the Windows Scripting Host - CodeProject]
   http://www.codeproject.com/KB/cs/ZetaScriptingHost.aspx
    [Den Microsoft Scripting Host in C# verwenden - Magerquark.de]
   http://blog.magerquark.de/2006-06/den-microsoft-scripting-host-in-c-v...
GP
Hi

Doch doch. Das mit dem Microsoft Script Control tut super. Genau was
ich suchte.
Bis auf den Punkt das der Debugger nicht so ohne weiteres kommt.

Dazu habe ich in einer anderen Gruppe etwas am laufen. (Hoffe der Link
tut wie es angedacht ist)
http://groups.google.de/group/microsoft.public.de.german.scripting.wsh/browse_thread/thread/6d6eb492411773bf?fwc=1
Günter Prossliner
2010-05-14 11:02:36 UTC
Permalink
Hallo Roland!
Post by GENiALi alias Roland Schumacher
Bis auf den Punkt das der Debugger nicht so ohne weiteres kommt.
eventuell:

[Debugging script in MS Script Control]
http://social.msdn.microsoft.com/Forums/en/vsdebug/thread/c73463c3-be6d-4464-8e54-6394ca8cbead


GP
GENiALi alias Roland Schumacher
2010-05-14 11:43:15 UTC
Permalink
Post by Günter Prossliner
Hallo Roland!
Post by GENiALi alias Roland Schumacher
Bis auf den Punkt das der Debugger nicht so ohne weiteres kommt.
[Debugging script in MS Script Control]http://social.msdn.microsoft.com/Forums/en/vsdebug/thread/c73463c3-be...
GP
Die zwei Keys habe ich etliche male zum Thema gefunden. Leider bleiben
die zur Zeit auf dem XP System ohne Wirkung.
Auf dem Dev Client griffen sie. Dort kommt jetzt der Debugger. Und ich
denke, dass sollte reichen. Genau hier werden die ja gebraucht.

Gruss
Roland Schumacher
FrankDzaebel
2010-05-14 11:08:30 UTC
Permalink
Hallo Roland,
Post by Roland Schumacher
Danke für diese Hinweise.
gern.
Post by Roland Schumacher
Das die Scripte dann mal auf z.b. C#
migriert werden ist in der Phase 2 angedacht.
ja. Du hattest in Deinem Blog ja:
"Was noch cool wäre ... So etwas sollte es
auch mit C# als Script geben."
geschrieben.
Dazu war es eigentlich gedacht.
Post by Roland Schumacher
Aber JETZT muss ich sie in VBScript ausführen.
Für das habe ich keine andere Lösung gefunden. Du?
ja, normal hätte ich da einfach ein VBS von
.NET aus aufgerufen. (Process.Start mit Auto-
Assoziation)

[How to call a VBScript file in a C# application? - Stack Overflow]
http://stackoverflow.com/questions/200422/how-to-call-a-vbscript-file-in-a-c-application

Aber wenn es für Dich mit dem zusätzlichen
Control günstiger ist, ist das auch eine Lösung.


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET
FrankDzaebel
2010-05-14 11:10:55 UTC
Permalink
... und das Debugging ist durch die Parameter-
Argumente //X //D auch extremst einfach.


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET
GENiALi alias Roland Schumacher
2010-05-14 11:46:10 UTC
Permalink
Post by FrankDzaebel
... und das Debugging ist durch die Parameter-
Argumente //X //D auch extremst einfach.
ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]http://Dzaebel.NET
Das habe ich auf dem XP Client auch mal probiert. Aber selbst das
bewegt den Debugger nicht zum erscheinen.
Da muss wohl noch was gröberes schief sein.

User hat Adminrechte.
Script Debugger ist installiert.
'stop' ist im Script.
RegKey's wurden alle gesetzt.

Weiss im Moment auf der Kiste auch nicht weiter. Aber so wie der PC
aussieht wäre es dann in etwa beim Kunde anzutreffen.
Von daher wäre es schon cool wenn dort der Debugger auch kommt. Aber
zur Zeit kein Weltuntergang.
FrankDzaebel
2010-05-14 12:21:17 UTC
Permalink
Hallo Roland,
Post by GENiALi alias Roland Schumacher
Post by FrankDzaebel
... und das Debugging ist durch die Parameter-
Argumente //X //D auch extremst einfach.
Das habe ich auf dem XP Client auch mal probiert.
Hier sind die Einstellungen, die gesetzt sein müssen:

[Das Debuggen von Windows Script Host, VBScript und JScript-Dateien]
http://support.microsoft.com/kb/308364

bzw. hier:

[MSXFAQ.DE - VBScript]
http://www.msxfaq.de/code/vbscript.htm
(suche nach:
281427 PRB: Microsoft Script Debugger Does Not Break at Error)

bzw:

[PRB: Microsoft Script Debugger wird nicht bei Fehler unterbrechen]
http://support.microsoft.com/kb/281427


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Loading...