Hi,<br><br>Yes, I can see that such 4-level comparisons are already <br>in the actctx.c codebase (probably for a reason ?). Looking at <br>MSDN earlier this evening, I could not find reference to 3rd and <br>4th entries in comparisons, but I probably skipped the right section
<br>in the doc.<br><br>Do you believe it is worthwhile to check this comparison function <br>from a windows test perspective ?<br><br>Thanks,<br><br>Norbert<br><br><div><span class="gmail_quote">2007/11/19, Robert Shearman <
<a href="mailto:rob@codeweavers.com">rob@codeweavers.com</a>>:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">nlataill wrote:<br>> Adding verbosity to
actctx.c, it seems that this game is requesting<br>> version 8.0.50608.0, which does match major.minor,<br>> but not the whole version number (/major.minor.build.revision)/.<br>><br>...<br>> According to MSDN, it seems only
major.minor is considered for version<br>> matching:<br>> - <a href="http://msdn2.microsoft.com/en-us/library/aa374234.aspx">http://msdn2.microsoft.com/en-us/library/aa374234.aspx</a> : A version<br>> number that changes only in the /build/ or /revision/ parts indicates
<br>> that the assembly is backward compatible with prior versions.<br>> - <a href="http://msdn2.microsoft.com/en-us/library/aa375365.aspx">http://msdn2.microsoft.com/en-us/library/aa375365.aspx</a>: [...] are<br>> manifests used to redirect the version of a side-by-side assembly to
<br>> another compatible version. The version that the assembly is being<br>> redirected to should have the same major.minor values as the original<br>> version.<br>><br>> I am proposing the following one-liner to ntdll/actctx.c:
<br>><br>> isa@isa:~/downloads/tmp$ diff -u wine-0.9.49/dlls/ntdll/actctx.c<br>> /home/isa/downloads/wine-0.9.49/dlls/ntdll/actctx.c<br>> --- wine-0.9.49/dlls/ntdll/actctx.c 2007-11-09 17:56: 12.000000000<br>
> +0100<br>> +++ /home/isa/downloads/wine-0.9.49/dlls/ntdll/actctx.c 2007-11-19<br>> 21:07:35.000000000 +0100<br>> @@ -1390,8 +1390,8 @@<br>> if (expected_ai)<br>> {<br>> /* FIXME: more tests */
<br>> - if (assembly->type == ASSEMBLY_MANIFEST &&<br>> - memcmp(&assembly->id.version, &expected_ai->version,<br>> sizeof(assembly->id.version)))<br>> + if (assembly->type == ASSEMBLY_MANIFEST &&
<br>> + ((assembly->id.version.major !=<br>> expected_ai->version.major) || (assembly->id.version.minor !=<br>> expected_ai->version.minor)) )<br>> {<br>> FIXME("wrong version\n");
<br>> return FALSE;<br>><br>> With this patch, the manifest (and related DLL) is loading correctly.<br>> This does not prevent my game die shortly after, in D3D code this<br>> time. Still work to do ;-)
<br><br>I think the attached patch is more complete and implements what MSDN states.<br><br>--<br>Rob Shearman<br><br><br></blockquote></div><br>