Re: PHP C++ extension on Windows: setting the working directory the same as PHP

From: Date: Thu, 03 Apr 2014 11:55:36 +0000
Subject: Re: PHP C++ extension on Windows: setting the working directory the same as PHP
References: 1 2 3 4 5 6 7  Groups: php.internals 
Request: Send a blank email to internals+get-73568@lists.php.net to get a copy of this message
Hi, On Thu, April 3, 2014 13:15, O'Neil Delpratt wrote: > > > Hi, > > > Please find the php_Saxon.h file attached. I am a beginner to the world > of php extensions so you might spot things that I should not be doing. Any > way the liens of code that you should focus are: > > Line 29 (includes the required header) > > > Lines between 143 - 160 > > > If you need the full project let me know. I have been using VC11. for the > setup of the project I followed various tutorial guides such as: > > > http://www.dreamincode.net/forums/topic/244215-introduction-to-creating-a > - > php-extension-for-windows/ > > kind regards, > > O'Neil > > > > > On 3 Apr 2014, at 11:47, Anatol Belski <anatol.php@belski.net> wrote: > > >> Hi O'Neil, >> >> >> On Thu, April 3, 2014 11:44, O'Neil Delpratt wrote: >> >>> Just to report to the list that the linkage error has not gone away, >>> > even >>> with the extern “C” wrapped around the include. It seems like I need >>> to add some library dependency? But my experience of Windows and c++ >>> is limited. >>> >>> >>> On 2 Apr 2014, at 15:42, Johannes Schlüter <johannes@schlueters.de> >>> wrote: >>> >>> >>> >>>> On Wed, 2014-04-02 at 14:56 +0100, O'Neil Delpratt wrote: >>>> >>>> >>>>> When I compile my code I am now getting the following error: >>>>> >>>>> >>>>> >>>>> Error 93 error LNK2001: unresolved external symbol >>>>> "__declspec(dllimport) char * __cdecl virtual_getcwd(char >>>>> *,unsigned >>>>> int,void * * *)" (__imp_?virtual_getcwd@@YAPADPADIPAPAPAX@Z) > C:\Users > >>>>> \ond1\Documents\Visual Studio 2012\Projects\saxon\saxon >>>>> \SaxonProcessor.obj >>>>> >>>>> >>>>> >>>>> insertions in my C Code: >>>> >>>> The subject talks about C++, now C. If you are using C++: Probably >>>> > that >>>> header is missing extern "C" declarations? Try >>>> >>>> extern "C" { #include "TSRM/tsrm_virtual_cwd.h" } >>>> >>>> >>>> >>>> johannes >>>> >>>> >>> >>> ------------------------------- >>> O'Neil Delpratt >>> Software Developer, Saxonica Limited Email: oneil@saxonica.com >>> Tel: +44 118 946 5894 >>> Web: http://www.saxonica.com >>> Saxonica Community site: http://dev.saxonica.com >>> Bug tracking site: https://saxonica.plan.io/ >>> >>> >>> >>> >>> >>> >>> -- >>> PHP Internals - PHP Runtime Development Mailing List >>> To unsubscribe, visit: http://www.php.net/unsub.php >>> >>> >>> >>> >> do you have your code somewhere around, or at least could you share a >> problem snippet? >> >> Regards >> >> >> Anatol >> > > ------------------------------- > O'Neil Delpratt > Software Developer, Saxonica Limited Email: oneil@saxonica.com > Tel: +44 118 946 5894 > Web: http://www.saxonica.com > Saxonica Community site: http://dev.saxonica.com > Bug tracking site: https://saxonica.plan.io/ > > Yes, first of all you need to extern "C" all the PHP headers, as they are all C. The php.h is needed on any platform. Then the header include order seems odd, please take a look at the following: http://svn.php.net/viewvc/pecl/xmldiff/trunk/php_xmldiff.h?view=markup http://svn.php.net/viewvc/pecl/ktaglib/trunk/php_ktaglib.h?view=markup those are the headers of some C++ extensions. Also it might be interesting for you to look at their config.w32 . With the VCWD_GETCWD usage - that's only what you need. It's not necessary to use GetCurrentDirectory or getcwd, VCWD_GETCWD will do the job and care about TS/NTS portable way. Please also take a look at this wiki page https://wiki.php.net/internals/review_comments with some useful hints, like that there should be no PHP_FUNCTION definitions in php_myext.h but rather in the .cpp file. Regards Anatol

« previous php.internals (#73568) next »