Re: Call delegate from C++

2019-04-25 Thread Alex via Digitalmars-d-learn
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)


Re: Call delegate from C++

2019-04-24 Thread Jacob Carlborg via Digitalmars-d-learn

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


Call delegate from C++

2019-04-24 Thread Nicholas Wilson via Digitalmars-d-learn

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