Can't cast to delgate type from void*?
Kirk McDonald
kirklin.mcdonald at gmail.com
Sun Feb 18 20:28:34 PST 2007
Rick Mann wrote:
> I'm trying to use delegates with Mac OS X's carbon events. When you register an event handler with the system, you can pass an arbitrary 4 bytes, which are passed back to you when the event handler is called.
>
> So, I was hoping to use a delegate. In my handler, I try to do this:
>
> extern (C)
> OSStatus
> EventHandler(EventHandlerCallRef inHandlerCallRef,
> EventRef inEvent,
> void* inUserData)
> {
> try
> {
> EventHandlerMethod handleEvent = cast (EventHandlerMethod) inUserData;
> .
> .
> .
>
> However, the compiler complains:
>
> DEventHandler.d:119: error: conversion to non-scalar type requested
>
> Why can't I do this?
>
> TIA,
> Rick
>
Delegates are 8 bytes. They consist of a function pointer and a context
pointer. I'm not familiar with Carbon's event handling, but I suspect
that void* is intended to serve the same purpose as a delegate's context
pointer.
--
Kirk McDonald
http://kirkmcdonald.blogspot.com
Pyd: Connecting D and Python
http://pyd.dsource.org
More information about the Digitalmars-d-learn
mailing list