Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > Calling a function using its pointer-

Reply
Thread Tools

Calling a function using its pointer-

 
 
Samie
Guest
Posts: n/a
 
      08-31-2004
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
 
Reply With Quote
 
 
 
 
Jens.Toerring@physik.fu-berlin.de
Guest
Posts: n/a
 
      08-31-2004
Samie <(E-Mail Removed)> 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 ___ http://www.velocityreviews.com/forums/(E-Mail Removed)-berlin.de
\__________________________ http://www.toerring.de
 
Reply With Quote
 
 
 
 
Eric Sosman
Guest
Posts: n/a
 
      08-31-2004
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.

--
http://www.velocityreviews.com/forums/(E-Mail Removed)

 
Reply With Quote
 
Buzzard
Guest
Posts: n/a
 
      09-01-2004
before you use the call funs->decode_image,you must do this as follow:
funs=(lcd_funs *)malloc(sizeof(lcd_funs));

Samie <(E-Mail Removed)> wrote in message
news:(E-Mail Removed) 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



 
Reply With Quote
 
Jens.Toerring@physik.fu-berlin.de
Guest
Posts: n/a
 
      09-01-2004
Buzzard <(E-Mail Removed)> wrote:
> Samie <(E-Mail Removed)> wrote in message
> news:(E-Mail Removed) 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 ___ (E-Mail Removed)-berlin.de
\__________________________ http://www.toerring.de
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Its a bird, its a plane, its.. um, an Attribute based System? thunk Ruby 14 04-03-2010 10:08 AM
Its a bird, its a plane, its.. um, an Attribute based System? thunk Ruby 0 04-01-2010 10:25 PM
Its a bird, its a plane, no ummm, its a Ruide thunk Ruby 1 03-30-2010 11:10 AM
write a function such that when ever i call this function in some other function .it should give me tha data type and value of calling function parameter komal C++ 6 01-25-2005 11:13 AM
calling virtual function results in calling function of base class... Andreas Lagemann C++ 8 01-10-2005 11:03 PM



Advertisments