[VB] Public type als para voor Method of Class

Pagina: 1
Acties:

  • XTerm
  • Registratie: Juli 2001
  • Laatst online: 10-06-2025
Ik heb een klasse gemaakt, en ik wil dat de functies van die klassen Custom made types accepteren en kunnen teruggeven.

Dit is een mini projectje dat het probleem laat zien, VB geeft een onbegrijpelijk vage error

users.skynet.be/xterm/prob.zip

AUB probeer dit op te lossen want als ik hier omheen moet coderen verneukt dit m'n project dat ik aan het maken ben.

[Oh ja, VB kan geen help vinden bij zijn vage error :(]

  • XTerm
  • Registratie: Juli 2001
  • Laatst online: 10-06-2025
Ik heb op google de error een aantal maal terug gevonden :

Only public user defined types defined in public object modules can be used as parameters or return types for public procedures of class modules or as fields of public user defined types

maar het helpt me geen mieter vooruit. Het KAN toch niet dat VB dit gewoon niet ondersteunt ???

Verwijderd

Deze fout ben ik ook een aantal keer tegen gekomen.
Ik heb je code niet bekeken, maar volgens mij moet je de custom types ook ín de classe definieren. En NIET in een module... maar mischien heb ik het net verkeerd om :?
Het is in ieder geval mogelijk wat je wilt, ik doe het zelf namelijk ook :)

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 15-09 19:11

Crazy D

I think we should take a look.

Op zaterdag 12 januari 2002 14:03 schreef XTerm89D het volgende:
Ik heb op google de error een aantal maal terug gevonden :

Only public user defined types defined in public object modules can be used as parameters or return types for public procedures of class modules or as fields of public user defined types

maar het helpt me geen mieter vooruit. Het KAN toch niet dat VB dit gewoon niet ondersteunt ???
Een class in je exe is private. In een aparte dll issie public.
Niet ideaal, maar 't is niet anders.
Workaround: module waarin je je type(s) definieert.

En de error zegt gewoon precies wat het probleem is. Moet je alleen wel weten wanneer je class private en public is.

Exact expert nodig?


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 15-09 22:39
De type is public hier, maar de plaats waar je hem declareert niet.

Maak die i die je meegeeft eens een globale var in je module en kijk of het dan wel goed gaat...

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 14-09 17:42

Gerco

Professional Newbie

Voor zover ik kan zien is alles goed, BEHALVE dat Class1 private is. Ik heb alleen geen idee hoe je die public kan maken.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • XTerm
  • Registratie: Juli 2001
  • Laatst online: 10-06-2025
Idd, het is inderdaad de Klasse die private was...
Persoonlijk dacht dat het de module was, heb nooit aan de klasse gedacht. Deze is nu aan het project gelinkt en het werkt schijnbaar perfect (ben nu aan het implementeren).
Ik hoop dat dit soort ontmoedigende grollen verdwenen zijn uit .NET !

Bij deze bedankt :)

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 14-09 17:42

Gerco

Professional Newbie

Op zaterdag 12 januari 2002 18:31 schreef XTerm89D het volgende:
Bij deze bedankt :)
Graag gedaan, maar mag ik ff vragen hoe je die klasse public gemaakt hebt? Of wat je ook gedaan hebt... ik kon die optie niet vinden iig.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • XTerm
  • Registratie: Juli 2001
  • Laatst online: 10-06-2025
Ik heb een nieuw project gestart, ActiveX dll, de klasse uit het originele project verwijderd en daar ingevoegd. Gewoon compileren als DLL en bij references toevoegen in het andere project.
De types vliegen nu lustig heen en weer :D

Ik zag meteen het voordeel dat ik 100% 'clean' gecodeerd en volledig OO, ik moest gewoon copy&paste doen en alles werkte nog steeds.

Als ActiveX dll is je exe ook kleiner, gebruikt hij minder geheugen en heeft je klasse meer mogelijkheden, dus als je een klasse nodig hebt zou ik die ALTIJD in een DLL zetten ipv in het hoofdproject.

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 14-09 17:42

Gerco

Professional Newbie

Op zaterdag 12 januari 2002 22:48 schreef XTerm89D het volgende:
als je een klasse nodig hebt zou ik die ALTIJD in een DLL zetten ipv in het hoofdproject.
Als die klasse gebruikt gaat worden door meer dan 1 (deel van het) programma wel ja, maar ik kom toch regelmatig situaties tegen waarbij ik klassen graag private houdt...

Wel extreem vaag dat dit de enige manier is om een UDT als return value of parameter te gebruiken. Ik kan me niet voorstellen dat MS zoiets stoms zou doen.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Op zondag 13 januari 2002 13:01 schreef Gerco het volgende:
Wel extreem vaag dat dit de enige manier is om een UDT als return value of parameter te gebruiken.
Je kan ook je udt type definieren in een typelib en die referencen, kan je toch vrij flexibel udt's gebruiken maar je hoeft niets mee te leveren aangezien deze typelib info alleen at compile time gebruikt word.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
// TestTypeLib.idl 

import "oaidl.idl";
import "ocidl.idl";

[uuid(A9664A21-8D93-4bcd-AA6E-E566611CE40C)]
library prob_typelib
{
   typedef struct {
    int r;
    int s;
   } X;
}

even door midl.exe halen waarna midl een tlb voor je uit zal spugen, deze kan je referencen in vb waarna je die module met de definitie van X kan droppen.

Goed ik geef toe wederom vrij omslachtig maar je hoeft teminste niet allerlei dll's mee te gaan leveren die je nog moet gaan registreren ook.
Pagina: 1