Cannot check function address

frame frame86 at live.com
Wed May 25 02:27:44 UTC 2022


On Tuesday, 24 May 2022 at 22:18:44 UTC, Adam D Ruppe wrote:

> There's a big difference between a function and a function 
> pointer.

Could you please clarify in this context?

`Fun` is basically generated by code like that:
```d
extern (Windows) void* GetProcAddress(void*, const char*);
auto fn = cast(T)GetProcAddress(lib, mangledName.toStringz);
```

> If it is a function, you get its address with the & operator. 
> But if it is supposed to be a function pointer, something is 
> wrong with the declaration...

I have no idea what the correct term is but the debugger says 
`fun` is:
(if that `assert()` is removed and it compiles):
```
Type: void function(...)*
Value: 0x0000000000000000  null
```

I can get some address with `&fun` but deferencing then fails:
```d
auto addr = &fun;
assert(*addr); // Error: expression `*addr` of type `extern (C) 
void(...)` does not have a boolean value
```


More information about the Digitalmars-d-learn mailing list