Avatar billede yellow Nybegynder
29. april 2005 - 11:31 Der er 1 kommentar og
1 løsning

CCW - array of objects

Hejsa,

Jeg eksperimenterer lidt med at lave en ccw til en .net komponent (strong key, regasm, gacutil etc ).
Komponenten skal kaldes via latebinding (vbscript/asp).

Jeg har lidt problemer med at få returneret et array af objekter fra komponenten.

Lad os sige jeg har en "Circle"-class.
I .net komponenten er der en funktion ala:

public Circle[] getCircles(){
  Circle one = new Circle();
  one.Radius = 1;
  Circle two = new Circle();
  two.Radius = 2;
  Circle[] circles = new Circle[] {one,two};
  return circles;
}

Kalder jeg denne funktion fra vbscript får jeg godt nok et array
tilbage:
set dotnetcom = CreateObject("Foo.Bar")
myArray = dotnetcom.getCircles
msgbox isArray( myArray )

***isArray melder true, så langt så godt
***UBound etc passer også med forventede antal elementer

myCircle = myArray(1)
***Her går det galt. Ovenstående melder type mismatch

Nåh ja. vbscript kan jo kun håndtere variant typen.
Så roder lidt med noget MarshalAs i .net:

[return:MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VarEnum.VT_VARIANT)]
public object[] getCircles(){
  Circle one = new Circle();
  one.Radius = 1;
  Circle two = new Circle();
  two.Radius = 2;
  object[] circles = new object[] {one,two};
  return circles;
}

Tilbage i vb kan jeg nu godt få lov at:
myCircle = myArray(1)

og
msgbox typename( myCircle ) melder object

Men her sidder jeg så fast igen.
myCircle.Radius melder "object expected"


Det længeste jeg er nået er at få returneret et array af strings fra min .net komponent.

Nogen der har nogle fifs til hvordan jeg får et array af objects returneret?
Avatar billede tuxic Nybegynder
04. juli 2005 - 20:05 #1
Det kan du vel ikke?

Hvis Circle er .NET klasse så kan du vel ikke bruge den i vb? AFAIK kan man sende (blittable) structs frem og tilbage mellem managed og unmanaged.
Avatar billede yellow Nybegynder
04. juli 2005 - 20:23 #2
Fik lavet en workaround ved at undgå at bruge arrays af objekterne.
Havde ikke noget problem med at benytte klaserne på kryds af managed og unmanaged, så længe jeg ikke sendte dem frem og tilbage i form af arrays...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester