|
Smalltalk/X WebserverDocumentation of class 'ExternalAddress': |
|
|
Class: ExternalAddressInheritance:Object | +--ExternalAddress | +--OSHandle
Description:Instances of this class represent external (non-Smalltalk) addresses. They are only useful to represent handles as returned by C functions as smalltalk objects. For example, Window- or WidgetIDs (which are actually 32 bit pointers) could be represented this way (better create a handle-subclass for it, to care for proper finalization). (you should not use SmallIntegers for this, since they can only represent 31 bits; LargeIntegers could be used in theory, but it is not a very good style to do so, since it makes things a bit cryptic - having ExternalAddresses around makes things pretty clear in inspectors etc.). There is not much you can do with ExternalAddresses on the smalltalk level; creation/use should be done in primitive C-code via __MKEXTERNALADDRESS(voidPtr) and __ExternalAddressVal(obj). ExternallAddresses are much like ExternalBytes - however, the latter allow you to access bytes via indexed at:/at:put: messages. ExternalAddresses do not allow such accesses (they are meant to remain anonymous, opaque handles). Also, memory blocks which are freeable should be represented as ExternalBytes. Related information:
ByteArray
ExternalBytes
ExternalFunction
[how to write primitive code]
Class protocol:instance creation queries
Instance protocol:Compatibility-Squeak accessing
Examples:To pass some C-pointer from primitive code to smalltalk: ... RETURN (__MKEXTERNALADDRESS(foo)); pass it back to C and use it there: ... if (__isExternalAddress(anExternalAddress)) { ptr = __externalAddressVal(anExternalAddress)); } ... concrete example: test1 %{ static char foo[] = {'h', 'e' ,'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '\n'}; RETURN (__MKEXTERNALADDRESS(foo)); %} test2:anExternalAddress %{ if (__isExternalAddress(anExternalAddress)) { printf(__externalAddressVal(anExternalAddress)); RETURN (self); } %} |
|
|
ST/X 6.1.1; WebServer 1.620 at exept:8081; Wed, 23 May 2012 09:03:10 GMT
|