gwollman@tnl.UUCP (Garrett A. Wollman) (06/29/89)
I am attempting to create a VFOSSIL interface library in C, and I am having
some difficulties in figuring out where to place the extended keywords,
far and pascal, about which the Microsoft _C Language Reference_ has
very little to say.
Basically, I need to declare a pointer to a far pointer to a far pascal
function. I started out with two possibilities (which compile), who
knows which is correct:
int (far pascal **f00)(int)
or
int (** far pascal f00)(int)
Under my interpretation, the first ought to give a far pascal pointer to
a pointer to a near cdecl function returning an int. The second seems
to be a pointer to a pointer to a function returning int, which resides
in the far data segment (FAR_DATA) and uses the pascal naming convention
(i.e. F00 instead of _f00).
Neither of these looks like what I want.
I also tried:
int (* far pascal *f00)(int)
But the compiler gave me the response, "Keyword pascal not allowed in
pointer to data," whatever that means.
So, can anybody figure out what would be the proper declaration? I am
at a loss at this point.
-GAWollman
--
"(-::-)" (Siamese twins) | "This is a public-access system, so I don't
gwollman@tnl.UUCP | know what the operator's opinions are."
...uunet!uvm-gen!tnl!gwollmanbeng@microsoft.UUCP (Samurai Cat) (07/02/89)
In article <213@tnl.UUCP> gwollman@tnl.UUCP (Garrett A. Wollman) writes: | | Basically, I need to declare a pointer to a far pointer to a far pascal | function. Try int (pascal far * *f00)(int); which works for me (using MS C 5.10). Usage example: int (pascal far * *f00)(int) = NULL; int (pascal far *funcptr)(int) = NULL; extern int far pascal catbox( int ); void no_means_no( void ) { funcptr = catbox; f00 = &funcptr; } This will compile into something suspiciously similar to mov WORD PTR _funcptr, OFFSET CATBOX mov WORD PTR _funcptr+2, SEG CATBOX mov WORD PTR _f00, OFFSET DGROUP:_funcptr (modulo sticky func-call residue) -- Ben Goetter microsoft!beng standard funky disclaimers in full effect, etc., etc.