comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Re: Reentrant API/IDL_KW_OFFSETOF() issue
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Switch to threaded view of this topic Create a new topic Submit Reply
Re: Reentrant API/IDL_KW_OFFSETOF() issue [message #38536] Tue, 16 March 2004 16:59
Rick Towler is currently offline  Rick Towler
Messages: 821
Registered: August 1998
Senior Member
> I'm no Barnaby Jones, but looking at the following from the export.h file
> (5.5-6.0):
>
> #define IDL_KW_OFFSETOF2(s, m) ((void *)(&(((s *)0)->m)))
> #define IDL_KW_V_OFFSETOF2(s, m) ((char *)(&(((s *)0)->m)))
> #define IDL_KW_S_OFFSETOF2(s, m) ((int *)(&(((s *)0)->m)))
>
> #define IDL_KW_OFFSETOF(m) IDL_KW_OFFSETOF2(KW_RESULT, m)
> #define IDL_KW_V_OFFSETOF(m) IDL_KW_V_OFFSETOF2(KW_RESULT, m)
> #define IDL_KW_S_OFFSETOF(m) IDL_KW_S_OFFSETOF2(KW_RESULT, m)
>
>
> The names lead me to believe that IDL_KW_V_OFFSETOF2() would return void
and
> (by default, as it would be the most common use) IDL_KW_OFFSETOF2() would
> return char. But if this were the case I am sure someone would have run
> into this?

Alas, there is no conspiracy here.

A helpful bird pointed out that C will tolerate such void pointers and
convert them but C++ will not. So IDL_KW_V_OFFSETOF() is the macro I should
use in my case.

Many thanks to those knowledgeable lurkers out there!


-Rick
Re: Reentrant API/IDL_KW_OFFSETOF() issue [message #38537 is a reply to message #38536] Tue, 16 March 2004 16:07 Go to previous message
Rick Towler is currently offline  Rick Towler
Messages: 821
Registered: August 1998
Senior Member
"Rick Towler" wrote in message...

> I have run into a problem with the IDL_KW_OFFSETOF() macro and the new
> keyword processing API. Starting with a functioning .cpp dlm, I set about
> to add a few keywords. Along the way I decided to switch the keyword
> processing to use the new API. A fine way to spend an afternoon...
>
> The problem is that the compiler chokes on the return value from
> IDL_KW_OFFSETOF() macro. It expects "char *" and gets "void *". I can
> recast everything but the EDG (and Ronn's book) make no mention of this
and
> my C/C++ skills are such that I don't really trust myself and assume that
I
> am in the wrong.
>
> I see IDL_KW_V_OFFSETOF() returns "char *" but again, no mention in the
EDG
> or Ronn's book.

I'm no Barnaby Jones, but looking at the following from the export.h file
(5.5-6.0):

#define IDL_KW_OFFSETOF2(s, m) ((void *)(&(((s *)0)->m)))
#define IDL_KW_V_OFFSETOF2(s, m) ((char *)(&(((s *)0)->m)))
#define IDL_KW_S_OFFSETOF2(s, m) ((int *)(&(((s *)0)->m)))

#define IDL_KW_OFFSETOF(m) IDL_KW_OFFSETOF2(KW_RESULT, m)
#define IDL_KW_V_OFFSETOF(m) IDL_KW_V_OFFSETOF2(KW_RESULT, m)
#define IDL_KW_S_OFFSETOF(m) IDL_KW_S_OFFSETOF2(KW_RESULT, m)


The names lead me to believe that IDL_KW_V_OFFSETOF2() would return void and
(by default, as it would be the most common use) IDL_KW_OFFSETOF2() would
return char. But if this were the case I am sure someone would have run
into this?

-Rick
  Switch to threaded view of this topic Create a new topic Submit Reply
Previous Topic: Reentrant API/IDL_KW_OFFSETOF() issue
Next Topic: Announcing GDL 0.7, now with PLOT command

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Wed Oct 08 13:04:48 PDT 2025

Total time taken to generate the page: 0.00602 seconds