Thread overview | |||||
---|---|---|---|---|---|
|
April 24, 2019 Call delegate from C++ | ||||
---|---|---|---|---|
| ||||
How do you pass a delegate to a c++ function to be called by it? The function to pass the delegate to is: extern (C++) int fakeEntrypoint( extern(C++) void function(void* /*delegate's context*/) func, void* /*delegate's context*/ arg); What I want is: int entrypoint(scope void delegate() func) { return fakeEntrypoint( // for some reason func.funcptr is void function() cast(void function(void*))func.funcptr, func.ptr); } but that fails with cannot pass argument cast(void function(void*))func.funcptr of type void function(void*) to parameter extern (C++) void function(void*) func |
April 24, 2019 Re: Call delegate from C++ | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nicholas Wilson | On 2019-04-24 18:20, Nicholas Wilson wrote: > How do you pass a delegate to a c++ function to be called by it? > > The function to pass the delegate to is: > > extern (C++) int > fakeEntrypoint( > extern(C++) void function(void* /*delegate's context*/) func, > void* /*delegate's context*/ arg); > > > What I want is: > > int entrypoint(scope void delegate() func) > { > return fakeEntrypoint( > // for some reason func.funcptr is void function() > cast(void function(void*))func.funcptr, > func.ptr); > } > > but that fails with > > cannot pass argument cast(void function(void*))func.funcptr of type > void function(void*) to parameter extern (C++) void function(void*) func You probably need to include `extern(C++)` in the cast, if that's possible. -- /Jacob Carlborg |
April 26, 2019 Re: Call delegate from C++ | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nicholas Wilson | On Wednesday, 24 April 2019 at 16:20:17 UTC, Nicholas Wilson wrote:
> How do you pass a delegate to a c++ function to be called by it?
>
> The function to pass the delegate to is:
>
> extern (C++) int
> fakeEntrypoint(
> extern(C++) void function(void* /*delegate's context*/) func,
> void* /*delegate's context*/ arg);
>
>
> What I want is:
>
> int entrypoint(scope void delegate() func)
> {
> return fakeEntrypoint(
> // for some reason func.funcptr is void function()
> cast(void function(void*))func.funcptr,
> func.ptr);
> }
>
> but that fails with
>
> cannot pass argument cast(void function(void*))func.funcptr of type
> void function(void*) to parameter extern (C++) void function(void*) func
It's clear that your delegate is not extern C++
int entrypoint(scope extern(C++) void delegate() func)
|
Copyright © 1999-2021 by the D Language Foundation