2016-06-18 41 views
0

Ich versuche, eine PHP-Erweiterung für die Win32-Plattform zu bauen, in der PHP-Quelle habe ich eine Funktion gefunden php_strtolower (char *, unsign int Länge), die ich verwenden möchte, aber wann Ich versuche es zu nennen, das Visual Studio beschwert sich über ein fehlendes Symbol.mit php_strtolower in win32 c Erweiterung

Erstellen Bibliothek C: \ projects \ php_mt4_ext \ Debug \ php_mt4_ext_debug.lib und Objekt C: \ projects \ php_mt4_ext \ Debug \ php_mt4_ext_debug.exp Manager.obj: error LNK2019: nicht aufgelöstes externes Symbol „__declspec (dllimport) char * __cdecl php_strtolower (char *, unsigned int ) "(__imp_? php_strtolower @@ YAPADPADI @ Z) verwiesen in Funktion " struct _zval_struct * __cdecl GET_MANAGER_ERROR (struct manager_object *, void * * *, Klasse std :: basic_string, Klasse std :: allocator>, int) " (? GET_MANAGER_ERROR @@ YAPAU_zval_struct @@ PAUmanager_object @@ PAPAPAXV? $ basic_string @ DU? $ char_traits @ D @ std @@ V? $ allocator @ D @ 2 @@ std @@ H @ Z) C: \ projects \ php_mt4_ext \ Debug \ php_mt4_ext_debug.dll: fatale Fehler LNK1120: 1 nicht aufgelöste externe

der Code, den ich tue ist sehr einfach, es ist genauso

php_printf folgt (php_strtolower ("Hallo", strlen ("Hallo")));

Ich importiere die php5ts.lib und alle anderen PHP-Funktionen scheinen kein Problem zu haben, aber diese Funktionen tun.

Weiß jemand, ob es einen speziellen Trick gibt, den ich tun soll, um diese Funktionen nutzen zu können?

Antwort

0

Das Problem war, dass ich einschloss und mein Projekt war eine C++ Codebasis.

Also brauchte ich die PHP-Header in extern "C" zu tun, wickeln, zum Beispiel

extern "C" {  
    #include <php.h>  
    #include <info.h> 
    #include<zend_exceptions.h>  
    #include <zend_interfaces.h>  
    #include <ext/standard/php_string.h> 
} 

dann ohne Probleme kompiliert es