Autor Beitrag
Aiko07
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Sa 07.04.12 09:10 
Hallo Forenmitglieder,

ich bin nicht neu in der community, allerdings bin ich bisher nur in Delphi unterwegs gewesen. Nun stehe ich gleich am Anfang vor einem Problem, was ich nicht ganz verstehe. In .Net-Welt sollte doch der Code zwischen VB.Net und C#.net auf beiden IDEs einsetzbar sein?
Problem:
In VB.Net habe ich ein Beispiel-Snippet unter Einbindung einer library (Interop.WBC_KrcLib.dll), funktioniert.
Ich habe versucht das Beispiel in C# nach-zustellen. Ist mir nicht gelungen.
Ich habe über die Suchfunktion keine Antworten erhalten, bitte um einen Wink in die korrekte Richtung.

Danke,


VB-->
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
Imports WBC_KrcLib
..
..
   Private Sub bt_Read_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_Read.Click
        Dim kukaservicefactory As WBC_KrcLib.KrcServiceFactory
        Dim ksyncvar As WBC_KrcLib.ICKSyncVar2

        kukaservicefactory = New KrcServiceFactory()

        ksyncvar = kukaservicefactory.GetService("WBC_KrcLib.SyncVar", "PrimaryInterOpTest1") <-- keine Fehler in VB!!
..
..
    End Sub
End Class


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
using WBC_KrcLib;
..
..
  private void btn1_Click(object sender, EventArgs e)
  {
       WBC_KrcLib.KrcServiceFactory kukaservicefactory;
       WBC_KrcLib.ICKSyncVar2 ksyncvar;

       kukaservicefactory = new KrcServiceFactory();
       ksyncvar = kukaservicefactory.GetService("WBC_KrcLib.SyncVar""PrimaryInterOpTest1");<-- Fehler 
       //Fehler1 Der Typ "WBC_KrcLib.IKService" kann nicht implizit in "WBC_KrcLib.ICKSyncVar2" konvertiert werden. Es ist bereits eine explizite Konvertierung vorhanden. 
  }

Moderiert von user profile iconTh69: Delphi-Tags hinzugefügt
Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Einloggen, um Attachments anzusehen!
Christoph1972
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Sa 07.04.12 09:41 
Hi,

bitte Code immer formatiert eintragen, das will sonst niemand lesen. (Unter Bereiche geht das)

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
private void btn1_Click(object sender, EventArgs e)
{
   WBC_KrcLib.KrcServiceFactory kukaservicefactory;
   WBC_KrcLib.ICKSyncVar2 ksyncvar;

   kukaservicefactory = new KrcServiceFactory();
   ksyncvar = kukaservicefactory.GetService("WBC_KrcLib.SyncVar""PrimaryInterOpTest1");<-- Fehler
}


Ich denke bei VB.Net ist OptionStrict auf off, das ist immer schlecht.

Du musst eine Typ-Umwandlung vornehmen.

ksyncvar <- was ist das für ein Type? Ich mache da mal exemplarisch KSYNVAR raus.

Aus:
ausblenden C#-Quelltext
1:
Dim ksyncvar As WBC_KrcLib.ICKSyncVar2					

wird:
ausblenden C#-Quelltext
1:
WBC_KrcLib.ICKSyncVar2 ksyncvar = new WBC_KrcLib.ICKSyncVar2					


Dann sollte die Zeile so aussehen:
ausblenden C#-Quelltext
1:
ksyncvar = (WBC_KrcLib.ICKSyncVar2)kukaservicefactory.GetService("WBC_KrcLib.SyncVar""PrimaryInterOpTest1");					

Hier wird allerdings eine Exeption gefeuert wenn die Konvertierung nicht gelingt.

Also besser so:
ausblenden C#-Quelltext
1:
ksyncvar = kukaservicefactory.GetService("WBC_KrcLib.SyncVar""PrimaryInterOpTest1"as WBC_KrcLib.ICKSyncVar2;					

Wenn die Konvertierung schiefgeht ist ksyncvar einfach null und das kann man ja abfangen.

_________________
Gruß
Christoph
Aiko07 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Sa 07.04.12 17:41 
Hallo Christoph,

sorry, mit der Formatierung, werde ich in Zukunft bedenken.

Vielen Dank fuer Deine Beschreibung. Habe ich umgesetzt und funktioniert :-). Ich benoetige vorerst nur 2 Funktionen aus der Library "ShowVar" und "SetVar".
Als naechstes werde ich mich in das Fehlerhandling einarbeiten.

Wuensche Euch ein frohes Osterfest,

Bernd


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:
public partial class Form1 : Form
    {
        WBC_KrcLib.KrcServiceFactory kukaservicefactory;
        WBC_KrcLib.ICKSyncVar2 ksyncvar;

        public Form1()
        {
            InitializeComponent();

        }

        private void button1_Click(object sender, EventArgs e)
        {
    //    WBC_KrcLib.KrcServiceFactory kukaservicefactory;
    //    WBC_KrcLib.ICKSyncVar2 ksyncvar;
 
        kukaservicefactory = new KrcServiceFactory();
        ksyncvar = kukaservicefactory.GetService("WBC_KrcLib.SyncVar""PrimaryInterOpTest1"as WBC_KrcLib.ICKSyncVar2;
        //ksyncvar = kukaservicefactory.GetService("WBC_KrcLib.SyncVar", "PrimaryInterOpTest1");<-- Fehler


 
            lb1.Text = "Dies ist der Text zum Label 1";
            lb1.Text = ksyncvar.ShowVar("$AXIS_ACT.A1"); //aktuellen Achswert auslesen und Label1 zuweisen

        }

        private void btn2_Click(object sender, EventArgs e)
        {
            lb2.Text = "Dies ist der Text zum Label 2";
            ksyncvar.SetVar("Hansi""1024"); //Der globalen int Variable "Hansi" im Grundsystem den Wert 1024 zuweisen.
            lb2.Text = ksyncvar.ShowVar("Hansi");  //Den Wert der globalen int Variable "Hansi" aus dem Grundsystem dem Label zuweisen.
        }
    }
}