www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Improve error message for "function is not callable using argument"

reply ryuukk_ <ryuukk.dev gmail.com> writes:
```
Error: function `proxy.injector.RemoteLibraryFunction(void* 
hProcess, const(wchar)* lpModuleName, const(wchar)* lpProcName, 
void* lpParameters, ulong dwParamSize, void** ppReturn)` is not 
callable using argument
types `(void*, const(wchar)*, wchar[512], void*, int, void**)`
```

While writing this post i just remembered that i attempted a PR 
few years ago: https://github.com/dlang/dmd/pull/13366

This is always painful to read/decipher, can this error be 
improved?

At least colors/arrows to tell me wich argument(s) are wrong

Perhaps on a new line?

Unfortunately, I have no ideas how to improve it, anyone mind 
helping me?

Thanks!
Apr 02 2023
parent Paul Backus <snarwin gmail.com> writes:
On Sunday, 2 April 2023 at 13:43:59 UTC, ryuukk_ wrote:
 ```
 Error: function `proxy.injector.RemoteLibraryFunction(void* 
 hProcess, const(wchar)* lpModuleName, const(wchar)* lpProcName, 
 void* lpParameters, ulong dwParamSize, void** ppReturn)` is not 
 callable using argument
 types `(void*, const(wchar)*, wchar[512], void*, int, void**)`
 ```

 While writing this post i just remembered that i attempted a PR 
 few years ago: https://github.com/dlang/dmd/pull/13366

 This is always painful to read/decipher, can this error be 
 improved?

 At least colors/arrows to tell me wich argument(s) are wrong

 Perhaps on a new line?

 Unfortunately, I have no ideas how to improve it, anyone mind 
 helping me?

 Thanks!
I attempted to reproduce your issue using the following example code: ```d void RemoteLibraryFunction( void* hProcess, const(wchar)* lpModuleName, const(wchar)* lpProcName, void* lpParameters, ulong dwParamSize, void** ppReturn ); void main() { void* vp; const(wchar)* cwcp; wchar[512] wca; int n; void** vpp; RemoteLibraryFunction(vp, cwcp, wca, vp, n, vpp); } ``` Attempting to compile this code with DMD v2.102.2 produced the following output: ``` example.d(18): Error: function `example.RemoteLibraryFunction(void* hProcess, const(wchar)* lpModuleName, const(wchar)* lpProcName, void* lpParameters, ulong dwParamSize, void** ppReturn)` is not callable using argument types `(void*, const(wchar)*, wchar[512], void*, int, void**)` example.d(18): cannot pass argument `wca` of type `wchar[512]` to parameter `const(wchar)* lpProcName` ``` Note the last line, which points out the specific argument that does not match. According to the changelog, that line was added in DMD v2.079.0: https://dlang.org/changelog/2.079.0.html#argument-mismatch So, unless you are using an extremely old D compiler, you should be seeing that line in your compiler's output.
Apr 03 2023