[ 01011011 @ 26.02.2008. 16:30 ] @
Pozdrav i dobar vam jos jedan dan :) Inace prilikom koverzacije koda vidim da postoji ErrObject Class koji je koriscen za error handling u Visual BASICU. Pise mi na nekim sajtovima da bih mogao da uradim u C# using Microsoft.VisualBasic; i da to treba da radi, medjutim ne radi. Jeli ovo COM object? Koja bi bolja bila opcija da se ovo uradi u C#? Da li postoji nesto u C# koje radi kao ErrObject Class u VB?

Da li mozda da uradim implementaciju ErrObject.cs vb klase u C#, pa da je tako koristim?

Sta mislite da je najbolja solucija/

Hvala
[ Shadowed @ 26.02.2008. 16:55 ] @
Sad je prilicno jasno da je to radio VB6 programer :)
Predlazem ti da ne koristis uopste taj objekat nego da "preformulises" kod tako da koristi try/catch.
[ mmix @ 26.02.2008. 17:12 ] @
Slazem se, koriscenje On Error Resume Next je najgora stvar koju mozes da uradis u VB.NET-u, i ne postoji nacin da ga implementiras u C# jer je koriscenje istog kompajlerska logika VB.NET kompajlera. Eventualno mozes da simuliras desavanja, ali to ti ne preporucujem, pogledaj sledeci metod iz VB.NETa i pogledaj kako izgleda taj kod kad se iz MSIL-a prebaci u C#:

Code:

VBNET

   Sub Main()
        On Error Resume Next

        Dim c As Integer = 0
        Dim x As Integer = 12 / c

        If Err.Number <> 0 Then
            Console.WriteLine("Greska")
        End If
    End Sub


izgleda benigno, zar ne, pogledaj sad kako nakazno izgleda C# implementacija toga Toliko o strukturalnom programiranju, a kamoli OOPu

Code:

[STAThread]
public static void Main()
{
    int VB$ResumeTarget;
    try
    {
        int VB$CurrentStatement;
    Label_0001:
        ProjectData.ClearProjectError();
        int VB$ActiveHandler = -2;
    Label_0009:
        VB$CurrentStatement = 2;
        int c = 0;
    Label_000E:
        VB$CurrentStatement = 3;
        int x = (int) Math.Round((double) (12.0 / ((double) c)));
    Label_0024:
        VB$CurrentStatement = 4;
        if (Information.Err().Number == 0)
        {
            goto Label_004B;
        }
    Label_003D:
        VB$CurrentStatement = 5;
        Console.WriteLine("Greska");
    Label_004B:;
        goto Label_00C3;
    Label_0051:
        VB$ResumeTarget = 0;
        switch ((VB$ResumeTarget + 1))
        {
            case 1:
                goto Label_0001;

            case 2:
                goto Label_0009;

            case 3:
                goto Label_000E;

            case 4:
                goto Label_0024;

            case 5:
                goto Label_003D;

            case 6:
                goto Label_004B;

            case 7:
                goto Label_00C3;

            default:
                goto Label_00B8;
        }
    Label_007D:
        VB$ResumeTarget = VB$CurrentStatement;
        switch (((VB$ActiveHandler > -2) ? VB$ActiveHandler : 1))
        {
            case 0:
                goto Label_00B8;

            case 1:
                goto Label_0051;
        }
    }
    catch (object obj1) when (?)
    {
        ProjectData.SetProjectError((Exception) obj1);
        goto Label_007D;
    }
Label_00B8:
    throw ProjectData.CreateProjectError(-2146828237);
Label_00C3:
    if (VB$ResumeTarget != 0)
    {
        ProjectData.ClearProjectError();
    }
}


[ 01011011 @ 26.02.2008. 17:24 ] @
Hvala ovo mi je trebalo :) Pa ja sam prije koristio na projektima try/catch uglavnom da uradim error handling, ali ono mislio sam da je ovo neki njihov nacin koji mora da se postuje, a posto su mi dali odrijesene ruke, ono samo cu da to pobrisem :)

Hvala mnogo na brzim i efikasnim odgovorima.

vidio sam da je ovo MSIL :)

[Ovu poruku je menjao 01011011 dana 26.02.2008. u 18:41 GMT+1]
[ mmix @ 26.02.2008. 17:49 ] @
nije MSIL, c# je, ali dobijen reverse engineeringom MSIL-a. Alatka koju koristim za te stvari je .NET Reflector, pribavi je. U principu je dobra za analizu koda, ali nije bas za konverziju posto MSIL ne cuva u metadata sve podatke (npr gube se imena lokalnih promenljivih u metodama). Sors to sors konverzija je bolja za ocuvanje takvih stvari.
[ 01011011 @ 26.02.2008. 18:00 ] @
zdravo opet, ma vidio sam pa sam ispravio prije nego sto si mi napisao odgovor. INACE naletio sam na jos jedan COM object Footprint :(

Kako je ovo naporno :)

E da, koristim ja reflector!!!
[ mmix @ 26.02.2008. 18:19 ] @
Ma nije naporno, dobro zezanje ;)

Inace, ErrObject nije COM objekat (cisto radi reference).

Ako imas COM objekat u VBNET projetu onda za njega mora da postoji Interop Referenca u References. INterop wrapperi su u MSILu i mozes neizmenjene da ih koristis iz C# projekta.
[ 01011011 @ 26.02.2008. 18:29 ] @
Ma nije meni problem, zezao bih se ja sa ovim danima da imam vremena. Znas kakvi su amerikanci, hoce da im se napravi od govana pita (od njihovog 10+ godina starog koda koji nije u tiers) da napravis enterprise application, design i da zavrsis front end u nekoliko mjeseci. Od Toga pocinje nervoza :)
[ 01011011 @ 26.02.2008. 19:20 ] @
vEvo jos sam naletio na nesto sto mi nije jasno pa rekoh da pitam da ne otvaram drugu temu, posto je ovo sve konverzija ovdje :)

znaci ima funkcija koja ocekuje string kao return u VB. i sada ima ovaj statement unutra

Code:
If Not _OpenSpecialtyDB(conn, Me, "FlatFee") Then
                        Return retval
                        Exit Function
                    End If


E sada kako da uradim exit function? kako se ja sjecam u C# da izadjes samo uradis return;

znaci

Code:
if (! (_OpenSpecialtyDB(conn, this, "FlatFee")))
{
                        return retval;
                        return;
                    }


sad mi nije jasno imam dva return stejtmenta ??? Da li je ovo ispravno?
[ Shadowed @ 26.02.2008. 19:40 ] @
Ne trebaju ti dva return-a, i njima je taj exit function suvisan.
[ 01011011 @ 26.02.2008. 20:27 ] @
Hvala hvala, jos malo pa sam konvertirao prvu klasu, jos samo 3000 mi je ostalo :) ha ha