Thread overview | ||||||
---|---|---|---|---|---|---|
|
September 07, 2006 How to create C function pointers | ||||
---|---|---|---|---|
| ||||
Hi,
In my application, I want to be able to extand it using regular C
objects, loaded using for example dlfcn for POSIX systems (maybe
another way on Windows).
So, I need to have C functions pointers but I don't know how to declare
them correctly :
/////////// test.d ///////////
module test;
extern(C){
int c_function(int param){
return param;
}
}
int main(){
// create a pointer to c_function
extern (C) int function(int) ptr = &c_function;
extern (C) int (*ptr2)(int) = &c_function;
return 0;
}
//////////////////////////////
$ dmd test.d
test.d(35): cannot implicitly convert expression (& c_function) of type
int(C *)(int param) to int(*)(int)
test.d(36): cannot implicitly convert expression (& c_function) of type
int(C *)(int param) to int(*)(int)
So, How do we do that , I did not find neither on the documentation nor
while browsing the web for the solution.
Thanks
Mildred
--
Mildred <xmpp:mildred@jabber.fr> <http://mildred632.free.fr/> Clef GPG : <hkp://pgp.mit.edu> ou <http://mildred632.free.fr/gpg_key> Fingerprint : 197C A7E6 645B 4299 6D37 684B 6F9D A8D6 [9A7D 2E2B]
|
September 07, 2006 Re: How to create C function pointers | ||||
---|---|---|---|---|
| ||||
Posted in reply to Mildred | Mildred wrote: > Hi, > > So, I need to have C functions pointers but I don't know how to declare > them correctly : It's easiest to typedef them; the typedef picks up the extern(C). > module test; > > extern(C){ > int c_function(int param){ > return param; > } > } extern (C) { typedef int function(int) CFuncPtr; } void main() { CFuncPtr ptr = &c_function; } BTW, this type of question really belongs in the 'D.learn' newgroup. |
September 07, 2006 Re: How to create C function pointers | ||||
---|---|---|---|---|
| ||||
Posted in reply to Don Clugston | > extern (C) { > typedef int function(int) CFuncPtr; > } > > void main() { > CFuncPtr ptr = &c_function; > } > > > BTW, this type of question really belongs in the 'D.learn' newgroup. Thanks for the answer, I didn't knew in which newsgroup I had to post, so I posted here, thanks for that clarification. I'll post there the next time. Mildred -- Mildred <xmpp:mildred@jabber.fr> <http://mildred632.free.fr/> Clef GPG : <hkp://pgp.mit.edu> ou <http://mildred632.free.fr/gpg_key> Fingerprint : 197C A7E6 645B 4299 6D37 684B 6F9D A8D6 [9A7D 2E2B] |
September 19, 2006 Re: How to create C function pointers | ||||
---|---|---|---|---|
| ||||
Posted in reply to Don Clugston | Don Clugston wrote: > Mildred wrote: >> Hi, >> >> So, I need to have C functions pointers but I don't know how to declare them correctly : > > It's easiest to typedef them; the typedef picks up the extern(C). Or alias them. >> module test; >> >> extern(C){ >> int c_function(int param){ >> return param; >> } >> } > > extern (C) { > typedef int function(int) CFuncPtr; > } <snip> I see. So extern (C) int function(int) ptr = &c_function; merely gives the symbol ptr C linkage, and doesn't affect the linkage of the function involved? There ought to be a way of giving function pointer types linkage attributes inline. Maybe int extern (C) function(int) ptr = &c_function; or something...? Stewart. -- -----BEGIN GEEK CODE BLOCK----- Version: 3.1 GCS/M d- s:-@ C++@ a->--- UB@ P+ L E@ W++@ N+++ o K-@ w++@ O? M V? PS- PE- Y? PGP- t- 5? X? R b DI? D G e++++ h-- r-- !y ------END GEEK CODE BLOCK------ My e-mail is valid but not my primary mailbox. Please keep replies on the 'group where everyone may benefit. |
Copyright © 1999-2021 by the D Language Foundation