RE: [INTERNALS-WIN] RE: [PHP-DEV] Differences in VC6 and VC9 Windows builds and MSSQL Driver.
[email protected] ("Uwe Schindler")
| Newsgroups | php.internals.win |
|---|---|
| Message-ID | <7F8418B146D44AC491149920B0EA7574@VEGA> |
> > In "Windows speek" a good API (that is windows conform) does not use > symbols > > from CRTs, only symbols from Windows API. And APIs like NSAPI or Sybase > CT > > or ODBC are designed this way. This is why you can use an ODBC driver in > any > > application regardless if the driver itself uses whatever CRT it likes > (or > > none at all). > > I think we have covered this point in all possible ways. Our main > issue is the lack of control on what the various libraries, extensions > and part of php do, the same applies for 3rd parties extension (be > pecl or other). In an ideal world, I would say we should use whatever > we like and it will work, ... in an ideal world :) bugs.php.net is > full of cases where people mixed libraries/extensions, strictness will > help (at least for the extensions) to get rid of this problem. You are right. I do not want to start a flamewar about windows here: The problem of PHP is, that it connects the good old windows world with the other good old UNIX/Linux/BSD world. A webserver like the Sun one was designed from the beginning with platform independence in mind. This why the NSAPI module can link to the webserver regardless if it uses VC6 or VC9 - many thanks to Rob McCool for that! For this webserver we can say: We do not have CRT problems, because the connection point between these two worlds is clearly: The SAPI module - there is no more interaction - it just works. With Apache Webserver this is completely different. The Apache webserver was designed originally on Unix platform. Because of that, the public API of this webserver was designed using symbols and structs of the UNIX/POSIX libc. Because of that, the API is only compatible, as long as the webserver is linked with DLLs that use the same CRT. If you try to link an Apache linked with Cygwin and a module from VC9, it will crash. If you try to link a mingw Apache with Cygwin, it crashes. If you try to link an Apache from MSVCRT 6 with PHP with VCRT 9, it crashes. Very simple or not? The same happens with extensions. But the problem is here is often very simple. If the public API of this extension uses symbols from the windows world, there is no problem, it just works (ODBC, Win32, Java, NSAPI, Sybase CT,...). If it uses symbols from the UNIX/POSIX world, the problems begin (not because of the word UNIX/POSIX in it - because of the different world in it). Greetings from a person that used Windows and POSIX always next to each other in his mind... Uwe