New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Discrepancy in symbol names between i686*/lib/*windows.* and .lib files in windows SDK #1985
Comments
Right, I suspect most of these issues will actually root in upstream win32 metadata. In the case of ICU functions, for example, microsoft/win32metadata#1013. If you'd like to share the list, we can help start filing/working those issues. |
Well, currently, the |
Great, thanks!
Agreed. Though arguably developers should really skip the ICU baked into the OS and just use a separate crate/SDK instead. It seems the OS ICU work may have already been abandoned, if we go by the outdated documentation. https://docs.microsoft.com/windows/win32/intl/international-components-for-unicode--icu-#history-of-changes-to-the-icu-library-in-windows |
ICU is only a small part of the list, though. |
Those are likely because those functions aren't As of now, we just assume all functions are |
I can dig into these. |
Looks like these are also win32metadata bugs. For example public struct CF_CONNECTION_KEY
{
public IntPtr Value;
}
public static extern HRESULT CfDisconnectSyncRoot([In] CF_CONNECTION_KEY ConnectionKey); That explains why But that's not accurate since the definition of #define DECLARE_OPAQUE_KEY( name ) \
typedef struct name##__ { \
LONGLONG Internal; \
} name, *P##name
DECLARE_OPAQUE_KEY( CF_CONNECTION_KEY );
|
Thanks for reporting! I think the issues here are all covered by the following metadata issues I just created: |
Shouldn't this stay open for the part where windows-rs will have to be adjusted for cdecl functions? (or are cdecl functions filtered-out?) |
I'd keep it open but its blocked on those issues being resolved and I don't know when they'll be fixed. I prefer not to keep issues open indefinitely. I'll keep an eye on those and if they get fixed soon I can plumb through to Rust pretty quickly. |
These issues have now been fixed in the win32 metadata. Reopening to deal with ingestion. |
Now that I have the updated metadata (#1996) I can finish this up. There are a few outstanding issues:
|
I'm going to leave this open until these two issues are resolved: |
Both blocking issues have now been resolved. Will update |
And here's the PR that pulls in the win32 metadata update that resolves these issues: #2015 |
I think I missed some libraries from the SDK, but I dumped symbol lists from windows SDK/MSVC for x86 and compared to what's in i686_msvc, and there are tons of discrepancies (this is after #1979).
Discrepancies where the numbers are different (windows.lib on the left, SDK on the right):
__imp__CfUpdateSyncProviderStatus@8 __imp__CfUpdateSyncProviderStatus@12
__imp__CfReportProviderProgress@28 __imp__CfReportProviderProgress@32
__imp__CfReportProviderProgress2@40 __imp__CfReportProviderProgress2@44
__imp__CfQuerySyncProviderStatus@8 __imp__CfQuerySyncProviderStatus@12
__imp__CfDisconnectSyncRoot@4 __imp__CfDisconnectSyncRoot@8
__imp__RegisterClusterNotifyV2@24 __imp__RegisterClusterNotifyV2@28
__imp__EapHostPeerQueryUserBlobFromCredentialInputFields@44 __imp__EapHostPeerQueryUserBlobFromCredentialInputFields@48
__imp__EapHostPeerQueryCredentialInputFields@36 __imp__EapHostPeerQueryCredentialInputFields@40
__imp__EapHostPeerInvokeIdentityUI@60 __imp__EapHostPeerInvokeIdentityUI@64
__imp__EapHostPeerInvokeConfigUI@40 __imp__EapHostPeerInvokeConfigUI@44
__imp__EapHostPeerGetMethodProperties@48 __imp__EapHostPeerGetMethodProperties@52
__imp__EapHostPeerConfigBlob2Xml@32 __imp__EapHostPeerConfigBlob2Xml@36
__imp__EapHostPeerGetIdentity@64 __imp__EapHostPeerGetIdentity@68
__imp__EapHostPeerBeginSession@64 __imp__EapHostPeerBeginSession@68
__imp__alljoyn_interfacedescription_property_getannotationscount@12 __imp__alljoyn_interfacedescription_property_getannotationscount@16
__imp__alljoyn_interfacedescription_property_getannotationatindex@32 __imp__alljoyn_interfacedescription_property_getannotationatindex@36
__imp__alljoyn_interfacedescription_property_getannotation@24 __imp__alljoyn_interfacedescription_property_getannotation@28
__imp__alljoyn_interfacedescription_property_eql@24 __imp__alljoyn_interfacedescription_property_eql@32
__imp__RtmConvertIpv6AddressAndLengthToNetAddress@16 __imp__RtmConvertIpv6AddressAndLengthToNetAddress@28
__imp__WinBioRemoveCredential@24 __imp__WinBioRemoveCredential@80
__imp__WinBioGetCredentialState@28 __imp__WinBioGetCredentialState@84
__imp__WlanSetProfileEapUserData@40 __imp__WlanSetProfileEapUserData@44
(this is the full list I got, i686_gnu has the same list, but most numbers are different (+1 when different))
Examples of discrepancies where there are no numbers in the .lib in the SDK:
__imp__ber_free@8 __imp__ber_free
__imp__ber_flatten@8 __imp__ber_flatten
__imp__ber_first_element@12 __imp__ber_first_element
__imp__ber_bvfree@4 __imp__ber_bvfree
__imp__ber_bvecfree@4 __imp__ber_bvecfree
__imp__ber_bvdup@4 __imp__ber_bvdup
__imp__ber_alloc_t@4 __imp__ber_alloc_t
__imp__LdapUnicodeToUTF8@16 __imp__LdapUnicodeToUTF8
__imp__LdapUTF8ToUnicode@16 __imp__LdapUTF8ToUnicode
__imp__LdapMapErrorToWin32@4 __imp__LdapMapErrorToWin32
__imp__LdapGetLastError@0 __imp__LdapGetLastError
__imp__CreateFX@16 __imp__CreateFX
__imp__DtcGetTransactionManagerExW@24 __imp__DtcGetTransactionManagerExW
__imp__DtcGetTransactionManagerExA@24 __imp__DtcGetTransactionManagerExA
__imp__DtcGetTransactionManagerC@28 __imp__DtcGetTransactionManagerC
__imp__DtcGetTransactionManager@28 __imp__DtcGetTransactionManager
the full list for those is 1283 lines, and the symbols come from a variety of libraries (advapi32, authz, avifil32, cabinat, comsvcs, fontsub, icu, mi, msajapi, msvfw32, mtxdm, netsh, oledlg, rpcrt4, rtutils, setupapi, shlwapi, snmpapi, user32, wdsclientapi, wdsmc, wdspxe, windows, wldap32, xaudio2_8, xolehlp). In some of them, all the symbols are without numbers (e.g. icu), but in others, some are and some aren't. I haven't looked exactly which ones are which.
The text was updated successfully, but these errors were encountered: