Op dinsdag 09 juli 2002 10:11 schreef MSalters het volgende:
Tegenvoorbeeld:
Functie in DLL die std::string teruggeeft. Mijn huidige prog heeft zo'n DLL nodig; in VB gaat je dat nevernooitniet lukken.
Een std::string is niets anders dan een pointer met wat metadata eraan. Het is wel mogelijk, niemand zei dat het makkelijk was
Maar goed, toegegeven een std::string is nogal idioot om als externe interface te gebruiken aangezien die alleen in C++ bestaan. Het is net zo idioot om 1 of andere datastructuur in een externe interface te gebruiken waarvan niemand weet hoe die in elkaar zit. Het is wel MOGELIJK, maar niet wenselijk. En mijns inziens ben je ook een flinke randdebiel als je dit soort taal specifieke dingen gebruikt in je export functies, maar dat is mijn persoonlijke mening.
Nou is GINA.DLL een MS DLL, en MS gebruikt de ++ in C++ nauwelijks, dus zo erg zal dat wel niet zijn. Aan de andere kant is een vararg argument wel redelijk MS stijl, en die is zo mogelijk nog lastiger te doen vanuit VB. Dat is dus tegenvoorbeeld 2.
Een vararg is een variabel aantal parameters? Als dat zo is dan is het in VB wel mogelijk, maar dat zal vast niet compatible zijn met de manier waarop C(++) dat doet. Voor de wijsheid van een vararg in een export functie moet ik verwijzen naar mijn bovenstaande mening.
In het kort: Een externe interface hou je zo taal-generiek als mogelijk is (iedere taal kan een char* uitlezen, of zou dat moeten kunnen), TENZIJ je voor de volle 100% zeker weet dat die interface ALLEEN door dezelfde taal gebruikt wordt.
Een std::string is prima als je die DLL alleen voor jezelf maakt, maak je 'em voor algemeen gebruik is het gewoon stom, punt.
MS doet dit in zo'n beetje de hele Win32 API, dus ik zie nog steeds geen reden waarom je geen GINA in VB zou kunnen maken. Dat het niet handig is weet ik ook wel.
- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!