Eric Pouech wrote:

Shachar Shemesh wrote:

Steven Edwards wrote:

First thing is first. Whats up with the *_must_be_suffixed_with_W_or_A_in_this_context error?


If you are compiling a core Wine DLL, you are not allowed to use the base name (IDC_ARROW). You must pick either the Ansi (IDC_ARROWA) or Wide (IDC_ARROWW) versions. To achieve this, wine uses a macro called "WINELIB_NAME_AW". It is defined in windef.h. You can see that if UNICODE is defined, this macro adds the "W" at the end, if not defined, it adds an "A" at the end, but if it is part of the wine compilation, it defines a name that is bound to cause an error, by appending "func_must_be_suffixed_with_W_or_A_in_this_context".


Steven's point is that MS headers don't define the A and W version of the resource identifiers (both resource types - RT_???? - and default resources - ID?_???? -). Which means we cannot compile some Wine DLLs (like commctrl, but also winmm, shell32...) without the wine headers. Since Wine code relies on information which isn't defined by the MS headers (nor the Mingw's), we do have an issue here.

That's not entirely true.
It's true that only IDC_ARROW is defined, but it is defined as "MAKEINTRESOURCE(32512)". MAKEINTRESOURCE, in turn, is defined as a AW macro.


Still, I agree that we are in a somewhat of a fix here. How about if we do it this way:
Define IDC_ARROWn as 32512
Define IDC_ARROW as MAKEINTRESOURCE(IDC_ARROWn)
This way, you will still get the error, you are still prohibited from using an unqualified version. From within the Wine sources, you can just do MAKEINTRESOURCEA(IDC_ARROWn).


Shachar

--
Shachar Shemesh
Open Source integration consultant
Home page & resume - http://www.shemesh.biz/





Reply via email to