Join GitHub today
GitHub is home to over 31 million developers working together to host and review code, manage projects, and build software together.
Sign upNeed calling convention for stdcall methods (different from functions!) #1342
Comments
This comment has been minimized.
This comment has been minimized.
|
|
This comment has been minimized.
This comment has been minimized.
|
Notably, the MIDL compiler seems to have no problem annotating |
This comment has been minimized.
This comment has been minimized.
|
MSVC for C actually suffers from the same issue. I tested it myself. Functions in COM that return structs have incorrect behavior when called from the official Microsoft C bindings using the MSVC compiler. I'm assuming nobody at Microsoft noticed or cared about this since very few people use C when working with COM. |
This comment has been minimized.
This comment has been minimized.
DemiMarie
commented
Jul 10, 2016
|
What about |
nrc
added
T-lang
T-dev-tools
labels
Aug 19, 2016
Boddlnagg
referenced this issue
Aug 19, 2016
Open
Make sure that correct calling convention is used #16
This comment has been minimized.
This comment has been minimized.
|
@DemiMarie |
This comment has been minimized.
This comment has been minimized.
|
It turned out that the workaround I use for this in winapi was actually slightly wrong. When the function takes parameters beyond |
retep998 commentedOct 28, 2015
The crux of the matter is that stdcall methods on Windows using msvc handle struct returns differently than stdcall functions. This is particularly noticeable in COM, where although most of COM doesn't use struct returns, a few of them do, causing incorrect behavior when you attempt to call them from Rust (or even C for the matter).
Thus I propose that we add a new calling convention specifically for stdcall methods. When faced with this new calling convention Rust should do what Clang does:
Relevant discussion in #LLVM https://gist.github.com/retep998/604861ea06aa984ee6c7
Relevant discussion on discourse https://internals.rust-lang.org/t/need-custom-calling-convention-for-com/2389
gist demonstrating the calling convention difference: https://gist.github.com/retep998/9503145841a61551d3c6