Hi Gustaf,Just a hint: it is absolutely essential that all the modules on Windows be compiled with the same model. I use -MD or -MDd. Otherwise, each of the modules compiled with a different model will have it's own global variables, environment and memory segment and the two modules will not interact even if they share the same global variables. It goes even further with whether the modules use MFC and common runtime or not, which Microsoft libraries they will include. That is why I avoid using make files and let Visual Studio do all the work and I make sure that all the modules have the same setup (see attached file). (I have shared my project files, all of which I created myself, with someone from the community recently).
Hope this helps, Ibrahim On 17-Nov-14 10:36, Gustaf Neumann wrote:
Dear Andrew and all, Over the weekend, I invested some more time into the windows port and got a better understanding of the logging issue (a write() operation succeeds inside nslog.c, but the identically operations inside driver.c does not work; "not work" means, that the write operation succeeds (i.e. reports the written number of bytes), but the file is always empty, even after a close()). The problem is not a argument-passing or memory problem, but seems to be a linking problem. When a file is opened in a module (here nslog) only this module can write successfully to this file. Under Windows other dlls can't write to it, even when they write to the same fd. It seems to me as if the nslog dll is linked to a private runtime environment. Looking up the windows handle same file descriptor (e.g. 3) leads to a different results when performed in nslog.c or in driver.c (or somewhere else in a function in libnsd). The current solution is to define for windows stub-functions ns_open, ns_close, ns_write, ns_read which are defined in libnsd. These functions are called from ns_log instead of the native OS functions (under windows _open, _close, _write, _read), which have btw different prototypes, so this abstraction seems beneficial for several reasons. The essential change is in [1], which add the ns_* functions and reverts the previous _MSV_VER bypass in nslog.c. For completeness, ns_tell should be added as well. Andrew, can you compare the linking options for nslog with these from Maurizio? Although the problem for nslog seems to be solved, i would not be surprised if other weirdnesses lurch around from other modules. -g
------------------------------------------------------------------------------ Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server from Actuate! Instantly Supercharge Your Business Reports and Dashboards with Interactivity, Sharing, Native Excel Exports, App Integration & more Get technology previously reserved for billion-dollar corporations, FREE http://pubads.g.doubleclick.net/gampad/clk?id=157005751&iu=/4140/ostg.clktrk
_______________________________________________ naviserver-devel mailing list naviserver-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/naviserver-devel