[VB.NET] <- C# interfaces en activator

Pagina: 1
Acties:

  • Scorpion1984
  • Registratie: Juni 2002
  • Laatst online: 11:19
C#:
1
2
3
4
ICreateDevEnum enumDev = null;

comObj = Activator.CreateInstance( srvType );
enumDev = (ICreateDevEnum) comObj;


Dat heb ik al gecodeerd naar
Visual Basic .NET:
1
2
3
Dim enumDev As ICreateDevEnum

comobj = Activator.CreateInstance(srvType)


Maar de laatste regel krijg ik niet omgecode, iemand?

  • ThunderNet
  • Registratie: Juni 2004
  • Laatst online: 15-05 20:41

ThunderNet

Flits!

moet je even zoeken op internet, weet niet meer precies waar, vbworld oid. kon je gewoon C# code in voeren, gaf ie VB.net terug en vice versa

lang leve CLR :D

Heb je liever vooraf, of achteraf, dat ik zeg dat ik geen flauw idee heb wat ik doe?


  • Scorpion1984
  • Registratie: Juni 2002
  • Laatst online: 11:19
Mmmh, ja dat is gelukt, nu heb ik alleen het volgende probleem

C#:
1
2
3
4
5
6
7
8
public class FilterCategory     // uuids.h  :  CLSID_*
{
        /// <summary> CLSID_AudioInputDeviceCategory, audio capture category </summary>
    public static readonly Guid AudioInputDevice    = new Guid( 0x33d9a762,0x90c8,0x11d0,0xbd,0x43,0x00,0xa0,0xc9,0x11,0xce,0x86 );

        /// <summary> CLSID_VideoInputDeviceCategory, video capture category </summary>
    public static readonly Guid VideoInputDevice    = new Guid( 0x860BB310,0x5D01,0x11d0,0xBD,0x3B,0x00,0xA0,0xC9,0x11,0xCE,0x86 );
}

converteerd hij naar

Visual Basic .NET:
1
2
3
4
Public Class FilterCategory
 Public Shared ReadOnly AudioInputDevice As Guid = New Guid (869902178, 37064, 4560, 189, 67, 0, 160, 201, 17, 206, 134)
 Public Shared ReadOnly VideoInputDevice As Guid = New Guid (-2046053616, 23809, 4560, 189, 59, 0, 160, 201, 17, 206, 134)
End Class


En dan kan de bovenste regel niet, dit komt omdat de getallen te lang zijn.

( Overload resolution failed because no accessible 'New' can be called with these arguments:
'Public Sub New(a As Integer, b As Short, c As Short, d As Byte, e As Byte, f As Byte, g As Byte, h As Byte, i As Byte, j As Byte, k As Byte)': Constant expression not representable in type 'Short'.
'Public Sub New(a As System.UInt32, b As System.UInt16, c As System.UInt16, d As Byte, e As Byte, f As Byte, g As Byte, h As Byte, i As Byte, j As Byte, k As Byte)': Value of type 'Integer' cannot be converted to 'System.UInt32'.
'Public Sub New(a As System.UInt32, b As System.UInt16, c As System.UInt16, d As Byte, e As Byte, f As Byte, g As Byte, h As Byte, i As Byte, j As Byte, k As Byte)': Value of type 'Integer' cannot be converted to 'System.UInt16'.
'Public Sub New(a As System.UInt32, b As System.UInt16, c As System.UInt16, d As Byte, e As Byte, f As Byte, g As Byte, h As Byte, i As Byte, j As Byte, k As Byte)': Value of type 'Integer' cannot be converted to 'System.UInt16'.
)

[ Voor 36% gewijzigd door Scorpion1984 op 17-01-2005 21:10 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:54
Je kan ook een Guid creeëren door een string mee te geven als argument bij de constructor.

Trouwens, ivm met je beginpost, welke error (compiler-error?) krijg je dan?

https://fgheysels.github.io/


  • Scorpion1984
  • Registratie: Juni 2002
  • Laatst online: 11:19
ThunderNet schreef op maandag 17 januari 2005 @ 21:04:
moet je even zoeken op internet, weet niet meer precies waar, vbworld oid. kon je gewoon C# code in voeren, gaf ie VB.net terug en vice versa

lang leve CLR :D
Als suggestie krijg ik:
Visual Basic .NET:
1
enumDev = CType(comobj, ICreateDevEnum)


maar dan krijg ik als foutmelding:
specific cast is not valid.(bij uitvoeren)
:?

Mischien ff meer toeliching: ICreateDevEnum is een interface

[ Voor 7% gewijzigd door Scorpion1984 op 17-01-2005 21:38 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:54
Voor zover ik weet is CType ook geen echte .NET method....

https://fgheysels.github.io/


  • Scorpion1984
  • Registratie: Juni 2002
  • Laatst online: 11:19
whoami schreef op maandag 17 januari 2005 @ 21:35:
Voor zover ik weet is CType ook geen echte .NET method....
Staat volledig nageslagen in de msdn library bij .NET

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

welk type is comobj?

ASSUME makes an ASS out of U and ME


  • Scorpion1984
  • Registratie: Juni 2002
  • Laatst online: 11:19
Visual Basic .NET:
1
dim comObj as object= nothingl;


Gewoon een object dus. Maar daar wordt een instance van een object ingezet door activator.CreateInstance:

Visual Basic .NET:
1
Dim srvType As Type = Type.GetTypeFromCLSID(CLSID_SystemDeviceEnum)

[ Voor 33% gewijzigd door Scorpion1984 op 17-01-2005 21:47 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:54
Scorpion1984 schreef op maandag 17 januari 2005 @ 21:39:
[...]


Staat volledig nageslagen in de msdn library bij .NET
Het is niet omdat het in de .NET MSDN library staat, dat het daarom een .NET functie is.
.NET is Object Oriented, CType is alleszins geen member method van een class; dus het is geen OO method.
Als je kijkt in de MSDN zie je ook dat het staat bij de Visual Basic Language Reference, en niet de VB.NET Language Ref.

Welke error krijg je nu trouwens ?

[ Voor 4% gewijzigd door whoami op 17-01-2005 21:49 ]

https://fgheysels.github.io/


  • OMX2000
  • Registratie: Januari 2001
  • Nu online

OMX2000

By any means necessary...

whoami schreef op maandag 17 januari 2005 @ 21:48:
[...]


Het is niet omdat het in de .NET MSDN library staat, dat het daarom een .NET functie is.
.NET is Object Oriented, CType is alleszins geen member method van een class; dus het is geen OO method.
Als je kijkt in de MSDN zie je ook dat het staat bij de Visual Basic Language Reference, en niet de VB.NET Language Ref.

Welke error krijg je nu trouwens ?
CType is zoals DirectCast niet gewoon een keyword? Ctype komt niet in C# voor omdat het casten daar natuurlijk anders gaat.

Dè developers podcast in je moerstaal : CodeKlets Podcast


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:54
CType is een functie in de VisualBasic namespace en is vb only; en geen .NET method. DirectCast is ook VB only (zit ook in de VB Language Ref).

https://fgheysels.github.io/


  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

volgens mij is je comobj niet van een klasse die afgeleid is van ICreateDevEnum.

enkele dingen:
-controleer of je geen null/nothing terug krijgt.
- doe eens comobj.GetType() en gooi die met een messagebox op het scherm (of zet er een breakpoint op)

en CType is idd VB language reference omdat dit handelt over casten.
net zoals je
C#:
1
typeVanIets abc = (typeVanIets)iets;

heb je
Visual Basic .NET:
1
dim abc as typeVanIets = CType(iets,typeVanIets)


met in beide gevallen bvb iets als object binnengekregen (vb in functie)

[ Voor 37% gewijzigd door H!GHGuY op 17-01-2005 22:03 ]

ASSUME makes an ASS out of U and ME


  • Scorpion1984
  • Registratie: Juni 2002
  • Laatst online: 11:19
Mijn probleem is het omschrijven van het volgende stukje code naar vb.net
C#:
1
2
3
4
5
object comObj = null;
ICreateDevEnum enumDev = null;

comObj = Activator.CreateInstance( srvType );
enumDev = (ICreateDevEnum) comObj;


Waarbij ICreateDevEnum een interface is.

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:54
Ja, dat weet ik ondertussen, maar welke fout krijg je...

https://fgheysels.github.io/


  • Scorpion1984
  • Registratie: Juni 2002
  • Laatst online: 11:19
whoami schreef op maandag 17 januari 2005 @ 22:05:
Ja, dat weet ik ondertussen, maar welke fout krijg je...
specific cast is not valid.(bij uitvoeren)
als ik ctype gebruik.

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

ik bedenk net:
is het wel mogelijk om te casten naar een interface?
want een interface is niet echt een object he...


net even de MSDN erop nagekeken...

[ Voor 17% gewijzigd door H!GHGuY op 19-01-2005 13:20 ]

ASSUME makes an ASS out of U and ME


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:54
Heb je al eens gedebugged ? Ben je zeker dat Activator.CreateInstance geen null returned ?

https://fgheysels.github.io/


  • MrSleeves
  • Registratie: Februari 2004
  • Laatst online: 10-04 19:23

MrSleeves

You'll thank me later.

whoami schreef op maandag 17 januari 2005 @ 21:58:
CType is een functie in de VisualBasic namespace en is vb only; en geen .NET method. DirectCast is ook VB only (zit ook in de VB Language Ref).
Hoe kom je daar nou bij?
CType valt onder type-conversions, net als CInt, CBool, etc. Die zitten niet in een namespace.
Het is zelfs helemaal geen method, maar een in-line procedure (die dan dus ook in C# aangeroepen wordt, indien nodig).

IF, End If, While is ook VB-only.
CType is een beetje vergelijkbaar met Dim. Dat hoeft in C# ook niet.

30Drie Web Design & IT Consultancy | Raven Consultancy Services


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:54
if, while, etc... zijn statements
CInt, etc... zijn niet .NET specifiek.

https://fgheysels.github.io/


  • MrSleeves
  • Registratie: Februari 2004
  • Laatst online: 10-04 19:23

MrSleeves

You'll thank me later.

whoami schreef op woensdag 19 januari 2005 @ 14:47:
if, while, etc... zijn statements
CInt, etc... zijn niet .NET specifiek.
In elke .NET-taal worden toch type-conversions ondersteund.
In C# kan je ook een CInt, CBool, en dus ook een CType doen. Het ziet er alleen anders uit, maar het resultaat is toch gewoon hetzelfde. :?

30Drie Web Design & IT Consultancy | Raven Consultancy Services


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:54
CInt() is een conversion function, terwijl C# een 'echte' cast kent.

Als je de IL bekijkt die gegeneerd wordt , dan zie je deze regel:
code:
1
2
L_0007: call int32 [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.IntegerType::FromString(string)
L_000c: stloc.1

Dat wil toch zeggen dat er een functie call gedaan wordt?
En waarom zou je die CInt() gebruiken als je ook een Convert.ToInt32 hebt bv?

Maar we gaan hier wel offtopic.

https://fgheysels.github.io/


  • MrSleeves
  • Registratie: Februari 2004
  • Laatst online: 10-04 19:23

MrSleeves

You'll thank me later.

whoami schreef op woensdag 19 januari 2005 @ 15:03:
CInt() is een conversion function, terwijl C# een 'echte' cast kent.

Als je de IL bekijkt die gegeneerd wordt , dan zie je deze regel:
code:
1
2
L_0007: call int32 [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.IntegerType::FromString(string)
L_000c: stloc.1

Dat wil toch zeggen dat er een functie call gedaan wordt?
En waarom zou je die CInt() gebruiken als je ook een Convert.ToInt32 hebt bv?

Maar we gaan hier wel offtopic.
Ik heb niks gezegd. :X
Ja, we gaan offtopic... maar wel leerzaam B)
Wel weer een beetje jammer dat ze je in de MSDN dan niet doorverwijzen (zo van: "Kijk, dit is ook leuk").

Ik weet wel van het bestaan van Convert, maar gebruik toch meestal CInt, e.d.

30Drie Web Design & IT Consultancy | Raven Consultancy Services

Pagina: 1