Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C Programming (http://www.velocityreviews.com/forums/f42-c-programming.html)
-   -   Calling a function using its pointer- (http://www.velocityreviews.com/forums/t435058-calling-a-function-using-its-pointer.html)

Samie 08-31-2004 07:03 PM

Calling a function using its pointer-
 
Hi
I have declared a structure that contains pointer to a function. The
code goes like this:
typedef struct lcd_funs lcd_funs;
struct lcd_funs {
void (*decode_image)(cyg_uint32 imageWidth,
cyg_uint32 imageHeight,
Palette_element *paletteData,
cyg_uint8 *imageData,
cyg_uint16 bitsPerPixel
);
};

Now, suppose, I have a variable funs that is pointer to a structure of
this type. When I try to call this function using the code below, it
hangs up. Any idea why it is happening like this? The code used to
call it as follows:
(funs->decode_image)(ptrConfigOptions->imageWidth,
ptrConfigOptions->imageHeight,
ptrConfigOptions->paletteData,
ptrConfigOptions->imageData,
ptrConfigOptions->bitsPerPixel
);
Is it the right way to call functions using their pointers that are
members of a structure?

Regards
Samie

Jens.Toerring@physik.fu-berlin.de 08-31-2004 07:14 PM

Re: Calling a function using its pointer-
 
Samie <samiehg@hotmail.com> wrote:
> I have declared a structure that contains pointer to a function. The
> code goes like this:
> typedef struct lcd_funs lcd_funs;
> struct lcd_funs {
> void (*decode_image)(cyg_uint32 imageWidth,
> cyg_uint32 imageHeight,
> Palette_element *paletteData,
> cyg_uint8 *imageData,
> cyg_uint16 bitsPerPixel
> );
> };


> Now, suppose, I have a variable funs that is pointer to a structure of
> this type. When I try to call this function using the code below, it
> hangs up. Any idea why it is happening like this? The code used to
> call it as follows:
> (funs->decode_image)(ptrConfigOptions->imageWidth,
> ptrConfigOptions->imageHeight,
> ptrConfigOptions->paletteData,
> ptrConfigOptions->imageData,
> ptrConfigOptions->bitsPerPixel
> );
> Is it the right way to call functions using their pointers that are
> members of a structure?


Yes, but you don't need the parentheses around the 'funs->decode_image'
bit. Why it hangs is a different question. First possibility to get
it wrong is not assigning the correct pointer to the 'decode_image'
member of the structure. Second possibility is that the function isn't
working as you expect it to. Did you try to use a debugger to see if
the function gets called at all (e.g. by setting a breakpoint at the
very start of it) and then to see what happens inside of it?

Regards, Jens
--
\ Jens Thoms Toerring ___ Jens.Toerring@physik.fu-berlin.de
\__________________________ http://www.toerring.de

Eric Sosman 08-31-2004 07:29 PM

Re: Calling a function using its pointer-
 
Samie wrote:
> Hi
> I have declared a structure that contains pointer to a function. The
> code goes like this:
> typedef struct lcd_funs lcd_funs;
> struct lcd_funs {
> void (*decode_image)(cyg_uint32 imageWidth,
> cyg_uint32 imageHeight,
> Palette_element *paletteData,
> cyg_uint8 *imageData,
> cyg_uint16 bitsPerPixel
> );
> };
>
> Now, suppose, I have a variable funs that is pointer to a structure of
> this type. When I try to call this function using the code below, it
> hangs up. Any idea why it is happening like this? The code used to
> call it as follows:
> (funs->decode_image)(ptrConfigOptions->imageWidth,
> ptrConfigOptions->imageHeight,
> ptrConfigOptions->paletteData,
> ptrConfigOptions->imageData,
> ptrConfigOptions->bitsPerPixel
> );
> Is it the right way to call functions using their pointers that are
> members of a structure?


The call looks all right to me. Have you actually
set the `decode_image' element to point at a function
of the appropriate type?

void decode_jpeg_image( /* prototype here */ );
void decode_tiff_image( /* prototype here */ );
...
if (jpeg_rulez)
funs->decode_image = decode_jpeg_image;
else
funs->decode_image = decode_tiff_image;
...
funs->decode_image( /* argument values here */);

If `decode_image' is in fact pointing to the function
you expect (you could insert a printf() at the start of
that function to be sure you get there), then your "it
hangs up" problem has some other cause.

--
Eric.Sosman@sun.com


Buzzard 09-01-2004 03:13 AM

Re: Calling a function using its pointer-
 
before you use the call funs->decode_image,you must do this as follow:
funs=(lcd_funs *)malloc(sizeof(lcd_funs));

Samie <samiehg@hotmail.com> wrote in message
news:6bd89c51.0408311103.4cb10dbc@posting.google.c om...
> Hi
> I have declared a structure that contains pointer to a function. The
> code goes like this:
> typedef struct lcd_funs lcd_funs;
> struct lcd_funs {
> void (*decode_image)(cyg_uint32 imageWidth,
> cyg_uint32 imageHeight,
> Palette_element *paletteData,
> cyg_uint8 *imageData,
> cyg_uint16 bitsPerPixel
> );
> };
>
> Now, suppose, I have a variable funs that is pointer to a structure of
> this type. When I try to call this function using the code below, it
> hangs up. Any idea why it is happening like this? The code used to
> call it as follows:
> (funs->decode_image)(ptrConfigOptions->imageWidth,
> ptrConfigOptions->imageHeight,
> ptrConfigOptions->paletteData,
> ptrConfigOptions->imageData,
> ptrConfigOptions->bitsPerPixel
> );
> Is it the right way to call functions using their pointers that are
> members of a structure?
>
> Regards
> Samie




Jens.Toerring@physik.fu-berlin.de 09-01-2004 08:12 AM

Re: Calling a function using its pointer-
 
Buzzard <Buzzard@126.com> wrote:
> Samie <samiehg@hotmail.com> wrote in message
> news:6bd89c51.0408311103.4cb10dbc@posting.google.c om...
>> Hi
>> I have declared a structure that contains pointer to a function. The
>> code goes like this:
>> typedef struct lcd_funs lcd_funs;
>> struct lcd_funs {
>> void (*decode_image)(cyg_uint32 imageWidth,
>> cyg_uint32 imageHeight,
>> Palette_element *paletteData,
>> cyg_uint8 *imageData,
>> cyg_uint16 bitsPerPixel
>> );
>> };
>>
>> Now, suppose, I have a variable funs that is pointer to a structure of
>> this type. When I try to call this function using the code below, it
>> hangs up. Any idea why it is happening like this? The code used to
>> call it as follows:
>> (funs->decode_image)(ptrConfigOptions->imageWidth,
>> ptrConfigOptions->imageHeight,
>> ptrConfigOptions->paletteData,
>> ptrConfigOptions->imageData,
>> ptrConfigOptions->bitsPerPixel
>> );
>> Is it the right way to call functions using their pointers that are
>> members of a structure?


Please don't toppost.

> before you use the call funs->decode_image,you must do this as follow:
> funs=(lcd_funs *)malloc(sizeof(lcd_funs));


Not necessarily. If the structure is defined and initialized e.g. in
some function and then a pointer to it is passed to some other function,
where funs->decode_image() is called, no dynamic allocation is required.
BTW, even if an allocation would be needed the cast of the return
value of malloc() is superfluous, it will just keep the compiler from
complaining if you forgot to include <stdlib.h>.

Regards, Jens
--
\ Jens Thoms Toerring ___ Jens.Toerring@physik.fu-berlin.de
\__________________________ http://www.toerring.de


All times are GMT. The time now is 03:34 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.