STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: servlet
-MAINTENANCE: Unknown
-STATUS: Unknown
+PRIMARY MAINTAINER: Sam Ruby <rubys@us.ibm.com>
+MAINTENANCE: Maintained
+STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: thttpd
MAINTENANCE: Unknown
MAINTENANCE: Maintained
STATUS: Experimental
-------------------------------------------------------------------------------
+EXTENSION: dotnet
+PRIMARY MAINTAINER: Sam Ruby <rubys@us.ibm.com>
+MAINTENANCE: Maintained
+STATUS: Experimental
+-------------------------------------------------------------------------------
EXTENSION: exif
MAINTENANCE: Unknown
STATUS: Unknown
EXTENSION: java
PRIMARY MAINTAINER: Sam Ruby <rubys@us.ibm.com>
MAINTENANCE: Maintained
-STATUS: Unknown
+STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: ldap
PRIMARY MAINTAINER: Rasmus Lerdorf <rasmus@php.net>
--- /dev/null
+Warning
+=======
+
+This support is EXPERIMENTAL. In fact, it integrates code that
+Microsoft labels as pre-beta. Use at your own risk.
+
+Build instructions
+==================
+
+Download and install the .NET Framework SDK Technology Preview from
+http://msdn.microsoft.com/net/#sdk. Once installed, copy Mscoree.h
+(typically found in C:\Program Files\NGWSSDK\Include to ext\dotnet).
+Do not simply add the NGWSSDK\Include directory to the include path
+as this will cause compilation failures.
+
+Download and unzip the source to the dm.net COM Moniker from
+http://staff.develop.com/jasonw/clr/readme.htm. Copy mscorlib.h
+to ext\dotnet. There is no need to register the clrmonsrv.dll as
+it is not used.
+
+At this point, the dotnet project can be built like any other
+project, from either VisualStudio 6's GUI or from the command line.
+Example command line invocation:
+
+ msdev dotnet.dsp /MAKE "dotnet - Win32 Debug_TS"
+
+Execution instructions:
+=======================
+
+Add "extension=php_dotnet.dll" into php.ini.
+
+Sample program can be found at dotnet.php
--- /dev/null
+/*
+ +----------------------------------------------------------------------+
+ | PHP version 4.0 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 2.02 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available at through the world-wide-web at |
+ | http://www.php.net/license/2_02.txt. |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@php.net so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Author: Sam Ruby <rubys@us.ibm.com> |
+ +----------------------------------------------------------------------+
+ */
+
+
+/*
+ * This module implements support for Microsoft .Net components.
+ */
+
+#ifdef PHP_WIN32
+
+#include <iostream.h>
+#include <math.h>
+#include <comdef.h>
+
+extern "C" {
+#include "php.h"
+#include "php_ini.h"
+
+pval php_COM_get_property_handler(zend_property_reference *property_reference);
+
+
+int php_COM_set_property_handler(zend_property_reference *property_reference, pval *value);
+
+char *php_COM_error_message(HRESULT hr);
+
+void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference);
+
+int php_COM_get_le_idispatch();
+}
+
+
+#include <stdio.h>
+
+#include "Mscoree.h"
+#include "mscorlib.h"
+
+using namespace mscorlib;
+
+static ICorRuntimeHost *pHost;
+static mscorlib::_AppDomain *pDomain;
+
+static zend_class_entry dotnet_class_entry;
+
+static OLECHAR *php_char_to_OLECHAR(char *C_str, uint strlen)
+{
+ OLECHAR *unicode_str = (OLECHAR *) emalloc(sizeof(OLECHAR)*(strlen+1));
+ OLECHAR *unicode_ptr = unicode_str;
+
+ while (*C_str) {
+ *unicode_ptr++ = (unsigned short) *C_str++;
+ }
+ *unicode_ptr = 0;
+
+ return unicode_str;
+}
+
+HRESULT dotnet_init() {
+ HRESULT hr;
+
+ hr = CoCreateInstance(CLSID_CorRuntimeHost, NULL, CLSCTX_ALL,
+ IID_ICorRuntimeHost, (void **)&pHost);
+ if (FAILED(hr)) return hr;
+
+ hr = pHost->Start();
+ if (FAILED(hr)) return hr;
+
+ IUnknown *uDomain;
+ hr = pHost->GetDefaultDomain(&uDomain);
+ if (FAILED(hr)) return hr;
+
+ hr = uDomain->QueryInterface(__uuidof(_AppDomain), (void**) &pDomain);
+ if (FAILED(hr)) return -1;
+
+ uDomain->Release();
+
+ return ERROR_SUCCESS;
+}
+
+HRESULT dotnet_create(OLECHAR *assembly, OLECHAR *datatype, struct IDispatch **object) {
+ HRESULT hr;
+
+ _ObjectHandle *pHandle;
+ hr = pDomain->CreateInstance(_bstr_t(assembly), _bstr_t(datatype), &pHandle);
+ if (FAILED(hr)) return hr;
+ if (!pHandle) return hr;
+
+ _variant_t unwrapped;
+ hr = pHandle->Unwrap(&unwrapped);
+ pHandle->Release();
+ if (FAILED(hr)) return hr;
+
+ *object = unwrapped.pdispVal;
+ return ERROR_SUCCESS;
+}
+
+void dotnet_term() {
+ if (pHost) pHost->Stop();
+ if (pHost) pHost->Release();
+ if (pDomain) pDomain->Release();
+
+ pHost = 0;
+ pDomain = 0;
+}
+
+/* {{{ proto int dotnet_load(string module_name)
+ Loads a DOTNET module */
+PHP_FUNCTION(DOTNET_load)
+{
+ HRESULT hr;
+ pval *assembly_name, *datatype_name;
+ OLECHAR *assembly, *datatype;
+ IDispatch FAR *i_dispatch = NULL;
+
+ if (ZEND_NUM_ARGS() != 2) WRONG_PARAM_COUNT;
+
+ getParameters(ht, 2, &assembly_name, &datatype_name);
+ convert_to_string(assembly_name);
+ assembly = php_char_to_OLECHAR(assembly_name->value.str.val, assembly_name->value.str.len);
+
+ convert_to_string(datatype_name);
+ datatype = php_char_to_OLECHAR(datatype_name->value.str.val, datatype_name->value.str.len);
+
+ /* obtain IDispatch */
+ hr=dotnet_create(assembly, datatype, &i_dispatch);
+ efree(assembly);
+ efree(datatype);
+ if (FAILED(hr)) {
+ char *error_message;
+ error_message = php_COM_error_message(hr);
+ php_error(E_WARNING,"Error obtaining .Net class for %s in assembly %s: %s",datatype_name->value.str.val,assembly_name->value.str.val,error_message);
+ LocalFree(error_message);
+ RETURN_FALSE;
+ }
+ if (!i_dispatch) {
+ php_error(E_WARNING,"Unable to locate %s in assembly %s",datatype_name->value.str.val,assembly_name->value.str.val);
+ RETURN_FALSE;
+ }
+
+ RETURN_LONG(zend_list_insert(i_dispatch,php_COM_get_le_idispatch()));
+}
+/* }}} */
+
+
+
+void php_DOTNET_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference)
+{
+ pval *object = property_reference->object;
+ zend_overloaded_element *function_name = (zend_overloaded_element *) property_reference->elements_list->tail->data;
+
+ if (zend_llist_count(property_reference->elements_list)==1
+ && !strcmp(function_name->element.value.str.val, "dotnet")) { /* constructor */
+ pval *object_handle;
+
+ PHP_FN(DOTNET_load)(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ if (!zend_is_true(return_value)) {
+ var_reset(object);
+ return;
+ }
+ ALLOC_ZVAL(object_handle);
+ *object_handle = *return_value;
+ pval_copy_constructor(object_handle);
+ INIT_PZVAL(object_handle);
+ zend_hash_index_update(object->value.obj.properties, 0, &object_handle, sizeof(pval *), NULL);
+ pval_destructor(&function_name->element);
+ } else {
+ php_COM_call_function_handler(INTERNAL_FUNCTION_PARAM_PASSTHRU, property_reference);
+ }
+}
+
+
+void php_register_DOTNET_class()
+{
+ INIT_OVERLOADED_CLASS_ENTRY(dotnet_class_entry, "DOTNET", NULL,
+ php_DOTNET_call_function_handler,
+ php_COM_get_property_handler,
+ php_COM_set_property_handler);
+
+ zend_register_internal_class(&dotnet_class_entry);
+}
+
+function_entry DOTNET_functions[] = {
+ {NULL, NULL, NULL}
+};
+
+
+static PHP_MINFO_FUNCTION(DOTNET)
+{
+ DISPLAY_INI_ENTRIES();
+}
+
+PHP_INI_BEGIN()
+PHP_INI_END()
+
+PHP_MINIT_FUNCTION(DOTNET)
+{
+
+ HRESULT hr;
+ CoInitialize(0);
+ hr = dotnet_init();
+ if (FAILED(hr)) return hr;
+
+ php_register_DOTNET_class();
+ REGISTER_INI_ENTRIES();
+ return SUCCESS;
+}
+
+
+PHP_MSHUTDOWN_FUNCTION(DOTNET)
+{
+ dotnet_term();
+ CoUninitialize();
+ UNREGISTER_INI_ENTRIES();
+ return SUCCESS;
+}
+
+
+zend_module_entry dotnet_module_entry = {
+ "dotnet", DOTNET_functions, PHP_MINIT(DOTNET), PHP_MSHUTDOWN(DOTNET), NULL, NULL, PHP_MINFO(DOTNET), STANDARD_MODULE_PROPERTIES
+};
+
+extern "C" {
+ ZEND_GET_MODULE(dotnet)
+}
+
+void php_register_DOTNET_class();
+
+
+#endif
--- /dev/null
+# Microsoft Developer Studio Project File - Name="dotnet" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102\r
+\r
+CFG=dotnet - Win32 Debug_TS\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "dotnet.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "dotnet.mak" CFG="dotnet - Win32 Debug_TS"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "dotnet - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE "dotnet - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE "dotnet - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE "dotnet - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=cl.exe\r
+MTL=midl.exe\r
+RSC=rc.exe\r
+\r
+!IF "$(CFG)" == "dotnet - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "..\..\Release"\r
+# PROP BASE Intermediate_Dir "..\..\Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "..\..\Release"\r
+# PROP Intermediate_Dir "..\..\Release"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c\r
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D ZEND_DEBUG=0 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /D HAVE_JAVA=1 /YX /FD /c\r
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x40d /d "NDEBUG"\r
+# ADD RSC /l 0x40d /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release/php_dotnet.dll" /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Release"\r
+\r
+!ELSEIF "$(CFG)" == "dotnet - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "..\..\Debug"\r
+# PROP BASE Intermediate_Dir "..\..\Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "..\..\Debug"\r
+# PROP Intermediate_Dir "..\..\Debug"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D ZEND_DEBUG=1 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /D HAVE_JAVA=1 /FR /YX /FD /GZ /c\r
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x40d /d "_DEBUG"\r
+# ADD RSC /l 0x40d /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug/php_dotnet.dll" /pdbtype:sept /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Debug"\r
+\r
+!ELSEIF "$(CFG)" == "dotnet - Win32 Debug_TS"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "..\..\Debug_TS"\r
+# PROP BASE Intermediate_Dir "..\..\Debug_TS"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "..\..\Debug_TS"\r
+# PROP Intermediate_Dir "..\..\Debug_TS"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /FR /YX /FD /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\\" /I "..\..\main" /I "..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /D HAVE_JAVA=1 /FR /YX /FD /GZ /c\r
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x40d /d "_DEBUG"\r
+# ADD RSC /l 0x40d /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_dotnet.dll" /pdbtype:sept /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Debug_TS"\r
+\r
+!ELSEIF "$(CFG)" == "dotnet - Win32 Release_TS"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "..\..\Release_TS"\r
+# PROP BASE Intermediate_Dir "..\..\Release_TS"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "..\..\Release_TS"\r
+# PROP Intermediate_Dir "..\..\Release_TS"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /YX /FD /c\r
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\\" /I "..\..\main" /I "..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZTS" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /D HAVE_JAVA=1 /YX /FD /c\r
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x40d /d "NDEBUG"\r
+# ADD RSC /l 0x40d /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_dotnet.dll" /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Release_TS"\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "dotnet - Win32 Release"\r
+# Name "dotnet - Win32 Debug"\r
+# Name "dotnet - Win32 Debug_TS"\r
+# Name "dotnet - Win32 Release_TS"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=.\dotnet.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\..\..\win32\winutil.c\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# Begin Source File\r
+\r
+SOURCE=.\php_dotnet.h\r
+# End Source File\r
+# End Group\r
+# End Target\r
+# End Project\r
--- /dev/null
+<?
+ $stack = new DOTNET("mscorlib","System.Collections.Stack");
+
+ $stack->Push(".Net");
+ $stack->Push("Hello ");
+
+ echo $stack->Pop() . $stack->Pop();
+?>
--- /dev/null
+#ifndef PHP_DOTNET_H
+#define PHP_DOTNET_H
+
+#if WIN32|WINNT
+
+extern PHP_MINIT_FUNCTION(DOTNET);
+extern PHP_MSHUTDOWN_FUNCTION(DOTNET);
+PHP_FUNCTION(DOTNET_load);
+
+extern zend_module_entry DOTNET_module_entry;
+#define DOTNET_module_ptr &DOTNET_module_entry
+
+#else
+
+#define DOTNET_module_ptr NULL
+
+#endif /* Win32|WINNT */
+
+#define phpext_DOTNET_ptr DOTNET_module_ptr
+
+#endif /* PHP_DOTNET_H */
{NULL, NULL, NULL}
};
+__declspec(dllexport)
+int php_COM_get_le_idispatch() {
+ return le_idispatch;
+}
static PHP_MINFO_FUNCTION(COM)
{
static int php_COM_load_typelib(char *typelib_name, int mode);
-static char *php_COM_error_message(HRESULT hr)
+__declspec(dllexport)
+char *php_COM_error_message(HRESULT hr)
{
void *pMsgBuf;
var_arg->pdispVal->lpVtbl->Release(var_arg->pdispVal);
/* fallthru */
default:
- php_error(E_WARNING,"Unsupported variant type");
+ php_error(E_WARNING,"Unsupported variant type: %d (0x%X)", var_arg->vt, var_arg->vt);
var_reset(pval_arg);
break;
}
}
+__declspec(dllexport)
pval php_COM_get_property_handler(zend_property_reference *property_reference)
{
pval result;
}
+__declspec(dllexport)
int php_COM_set_property_handler(zend_property_reference *property_reference, pval *value)
{
pval result;
+__declspec(dllexport)
void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference)
{
zend_overloaded_element *overloaded_property;
int arg_count = ZEND_NUM_ARGS();
VARIANTARG var_result;
+ var_result.vt = VT_EMPTY;
+
if (object_handle.vt != VT_DISPATCH) {
/* that shouldn't happen */
return;
--- /dev/null
+Warning
+=======
+
+This support is EXPERIMENTAL. In fact, it integrates code that
+Microsoft labels as pre-beta. Use at your own risk.
+
+Build instructions
+==================
+
+Download and install the .NET Framework SDK Technology Preview from
+http://msdn.microsoft.com/net/#sdk. Once installed, copy Mscoree.h
+(typically found in C:\Program Files\NGWSSDK\Include to ext\dotnet).
+Do not simply add the NGWSSDK\Include directory to the include path
+as this will cause compilation failures.
+
+Download and unzip the source to the dm.net COM Moniker from
+http://staff.develop.com/jasonw/clr/readme.htm. Copy mscorlib.h
+to ext\dotnet. There is no need to register the clrmonsrv.dll as
+it is not used.
+
+At this point, the dotnet project can be built like any other
+project, from either VisualStudio 6's GUI or from the command line.
+Example command line invocation:
+
+ msdev dotnet.dsp /MAKE "dotnet - Win32 Debug_TS"
+
+Execution instructions:
+=======================
+
+Add "extension=php_dotnet.dll" into php.ini.
+
+Sample program can be found at dotnet.php
--- /dev/null
+/*
+ +----------------------------------------------------------------------+
+ | PHP version 4.0 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 2.02 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available at through the world-wide-web at |
+ | http://www.php.net/license/2_02.txt. |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@php.net so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Author: Sam Ruby <rubys@us.ibm.com> |
+ +----------------------------------------------------------------------+
+ */
+
+
+/*
+ * This module implements support for Microsoft .Net components.
+ */
+
+#ifdef PHP_WIN32
+
+#include <iostream.h>
+#include <math.h>
+#include <comdef.h>
+
+extern "C" {
+#include "php.h"
+#include "php_ini.h"
+
+pval php_COM_get_property_handler(zend_property_reference *property_reference);
+
+
+int php_COM_set_property_handler(zend_property_reference *property_reference, pval *value);
+
+char *php_COM_error_message(HRESULT hr);
+
+void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference);
+
+int php_COM_get_le_idispatch();
+}
+
+
+#include <stdio.h>
+
+#include "Mscoree.h"
+#include "mscorlib.h"
+
+using namespace mscorlib;
+
+static ICorRuntimeHost *pHost;
+static mscorlib::_AppDomain *pDomain;
+
+static zend_class_entry dotnet_class_entry;
+
+static OLECHAR *php_char_to_OLECHAR(char *C_str, uint strlen)
+{
+ OLECHAR *unicode_str = (OLECHAR *) emalloc(sizeof(OLECHAR)*(strlen+1));
+ OLECHAR *unicode_ptr = unicode_str;
+
+ while (*C_str) {
+ *unicode_ptr++ = (unsigned short) *C_str++;
+ }
+ *unicode_ptr = 0;
+
+ return unicode_str;
+}
+
+HRESULT dotnet_init() {
+ HRESULT hr;
+
+ hr = CoCreateInstance(CLSID_CorRuntimeHost, NULL, CLSCTX_ALL,
+ IID_ICorRuntimeHost, (void **)&pHost);
+ if (FAILED(hr)) return hr;
+
+ hr = pHost->Start();
+ if (FAILED(hr)) return hr;
+
+ IUnknown *uDomain;
+ hr = pHost->GetDefaultDomain(&uDomain);
+ if (FAILED(hr)) return hr;
+
+ hr = uDomain->QueryInterface(__uuidof(_AppDomain), (void**) &pDomain);
+ if (FAILED(hr)) return -1;
+
+ uDomain->Release();
+
+ return ERROR_SUCCESS;
+}
+
+HRESULT dotnet_create(OLECHAR *assembly, OLECHAR *datatype, struct IDispatch **object) {
+ HRESULT hr;
+
+ _ObjectHandle *pHandle;
+ hr = pDomain->CreateInstance(_bstr_t(assembly), _bstr_t(datatype), &pHandle);
+ if (FAILED(hr)) return hr;
+ if (!pHandle) return hr;
+
+ _variant_t unwrapped;
+ hr = pHandle->Unwrap(&unwrapped);
+ pHandle->Release();
+ if (FAILED(hr)) return hr;
+
+ *object = unwrapped.pdispVal;
+ return ERROR_SUCCESS;
+}
+
+void dotnet_term() {
+ if (pHost) pHost->Stop();
+ if (pHost) pHost->Release();
+ if (pDomain) pDomain->Release();
+
+ pHost = 0;
+ pDomain = 0;
+}
+
+/* {{{ proto int dotnet_load(string module_name)
+ Loads a DOTNET module */
+PHP_FUNCTION(DOTNET_load)
+{
+ HRESULT hr;
+ pval *assembly_name, *datatype_name;
+ OLECHAR *assembly, *datatype;
+ IDispatch FAR *i_dispatch = NULL;
+
+ if (ZEND_NUM_ARGS() != 2) WRONG_PARAM_COUNT;
+
+ getParameters(ht, 2, &assembly_name, &datatype_name);
+ convert_to_string(assembly_name);
+ assembly = php_char_to_OLECHAR(assembly_name->value.str.val, assembly_name->value.str.len);
+
+ convert_to_string(datatype_name);
+ datatype = php_char_to_OLECHAR(datatype_name->value.str.val, datatype_name->value.str.len);
+
+ /* obtain IDispatch */
+ hr=dotnet_create(assembly, datatype, &i_dispatch);
+ efree(assembly);
+ efree(datatype);
+ if (FAILED(hr)) {
+ char *error_message;
+ error_message = php_COM_error_message(hr);
+ php_error(E_WARNING,"Error obtaining .Net class for %s in assembly %s: %s",datatype_name->value.str.val,assembly_name->value.str.val,error_message);
+ LocalFree(error_message);
+ RETURN_FALSE;
+ }
+ if (!i_dispatch) {
+ php_error(E_WARNING,"Unable to locate %s in assembly %s",datatype_name->value.str.val,assembly_name->value.str.val);
+ RETURN_FALSE;
+ }
+
+ RETURN_LONG(zend_list_insert(i_dispatch,php_COM_get_le_idispatch()));
+}
+/* }}} */
+
+
+
+void php_DOTNET_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference)
+{
+ pval *object = property_reference->object;
+ zend_overloaded_element *function_name = (zend_overloaded_element *) property_reference->elements_list->tail->data;
+
+ if (zend_llist_count(property_reference->elements_list)==1
+ && !strcmp(function_name->element.value.str.val, "dotnet")) { /* constructor */
+ pval *object_handle;
+
+ PHP_FN(DOTNET_load)(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ if (!zend_is_true(return_value)) {
+ var_reset(object);
+ return;
+ }
+ ALLOC_ZVAL(object_handle);
+ *object_handle = *return_value;
+ pval_copy_constructor(object_handle);
+ INIT_PZVAL(object_handle);
+ zend_hash_index_update(object->value.obj.properties, 0, &object_handle, sizeof(pval *), NULL);
+ pval_destructor(&function_name->element);
+ } else {
+ php_COM_call_function_handler(INTERNAL_FUNCTION_PARAM_PASSTHRU, property_reference);
+ }
+}
+
+
+void php_register_DOTNET_class()
+{
+ INIT_OVERLOADED_CLASS_ENTRY(dotnet_class_entry, "DOTNET", NULL,
+ php_DOTNET_call_function_handler,
+ php_COM_get_property_handler,
+ php_COM_set_property_handler);
+
+ zend_register_internal_class(&dotnet_class_entry);
+}
+
+function_entry DOTNET_functions[] = {
+ {NULL, NULL, NULL}
+};
+
+
+static PHP_MINFO_FUNCTION(DOTNET)
+{
+ DISPLAY_INI_ENTRIES();
+}
+
+PHP_INI_BEGIN()
+PHP_INI_END()
+
+PHP_MINIT_FUNCTION(DOTNET)
+{
+
+ HRESULT hr;
+ CoInitialize(0);
+ hr = dotnet_init();
+ if (FAILED(hr)) return hr;
+
+ php_register_DOTNET_class();
+ REGISTER_INI_ENTRIES();
+ return SUCCESS;
+}
+
+
+PHP_MSHUTDOWN_FUNCTION(DOTNET)
+{
+ dotnet_term();
+ CoUninitialize();
+ UNREGISTER_INI_ENTRIES();
+ return SUCCESS;
+}
+
+
+zend_module_entry dotnet_module_entry = {
+ "dotnet", DOTNET_functions, PHP_MINIT(DOTNET), PHP_MSHUTDOWN(DOTNET), NULL, NULL, PHP_MINFO(DOTNET), STANDARD_MODULE_PROPERTIES
+};
+
+extern "C" {
+ ZEND_GET_MODULE(dotnet)
+}
+
+void php_register_DOTNET_class();
+
+
+#endif
--- /dev/null
+# Microsoft Developer Studio Project File - Name="dotnet" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102\r
+\r
+CFG=dotnet - Win32 Debug_TS\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "dotnet.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "dotnet.mak" CFG="dotnet - Win32 Debug_TS"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "dotnet - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE "dotnet - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE "dotnet - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE "dotnet - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=cl.exe\r
+MTL=midl.exe\r
+RSC=rc.exe\r
+\r
+!IF "$(CFG)" == "dotnet - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "..\..\Release"\r
+# PROP BASE Intermediate_Dir "..\..\Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "..\..\Release"\r
+# PROP Intermediate_Dir "..\..\Release"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c\r
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D ZEND_DEBUG=0 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /D HAVE_JAVA=1 /YX /FD /c\r
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x40d /d "NDEBUG"\r
+# ADD RSC /l 0x40d /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release/php_dotnet.dll" /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Release"\r
+\r
+!ELSEIF "$(CFG)" == "dotnet - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "..\..\Debug"\r
+# PROP BASE Intermediate_Dir "..\..\Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "..\..\Debug"\r
+# PROP Intermediate_Dir "..\..\Debug"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D ZEND_DEBUG=1 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /D HAVE_JAVA=1 /FR /YX /FD /GZ /c\r
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x40d /d "_DEBUG"\r
+# ADD RSC /l 0x40d /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug/php_dotnet.dll" /pdbtype:sept /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Debug"\r
+\r
+!ELSEIF "$(CFG)" == "dotnet - Win32 Debug_TS"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "..\..\Debug_TS"\r
+# PROP BASE Intermediate_Dir "..\..\Debug_TS"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "..\..\Debug_TS"\r
+# PROP Intermediate_Dir "..\..\Debug_TS"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /FR /YX /FD /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\\" /I "..\..\main" /I "..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /D HAVE_JAVA=1 /FR /YX /FD /GZ /c\r
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x40d /d "_DEBUG"\r
+# ADD RSC /l 0x40d /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_dotnet.dll" /pdbtype:sept /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Debug_TS"\r
+\r
+!ELSEIF "$(CFG)" == "dotnet - Win32 Release_TS"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "..\..\Release_TS"\r
+# PROP BASE Intermediate_Dir "..\..\Release_TS"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "..\..\Release_TS"\r
+# PROP Intermediate_Dir "..\..\Release_TS"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /YX /FD /c\r
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\\" /I "..\..\main" /I "..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZTS" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /D HAVE_JAVA=1 /YX /FD /c\r
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x40d /d "NDEBUG"\r
+# ADD RSC /l 0x40d /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_dotnet.dll" /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Release_TS"\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "dotnet - Win32 Release"\r
+# Name "dotnet - Win32 Debug"\r
+# Name "dotnet - Win32 Debug_TS"\r
+# Name "dotnet - Win32 Release_TS"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=.\dotnet.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\..\..\win32\winutil.c\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# Begin Source File\r
+\r
+SOURCE=.\php_dotnet.h\r
+# End Source File\r
+# End Group\r
+# End Target\r
+# End Project\r
--- /dev/null
+<?
+ $stack = new DOTNET("mscorlib","System.Collections.Stack");
+
+ $stack->Push(".Net");
+ $stack->Push("Hello ");
+
+ echo $stack->Pop() . $stack->Pop();
+?>
--- /dev/null
+#ifndef PHP_DOTNET_H
+#define PHP_DOTNET_H
+
+#if WIN32|WINNT
+
+extern PHP_MINIT_FUNCTION(DOTNET);
+extern PHP_MSHUTDOWN_FUNCTION(DOTNET);
+PHP_FUNCTION(DOTNET_load);
+
+extern zend_module_entry DOTNET_module_entry;
+#define DOTNET_module_ptr &DOTNET_module_entry
+
+#else
+
+#define DOTNET_module_ptr NULL
+
+#endif /* Win32|WINNT */
+
+#define phpext_DOTNET_ptr DOTNET_module_ptr
+
+#endif /* PHP_DOTNET_H */
CREDIT_LINE("DBA", "Sascha Schumann");
CREDIT_LINE("DBM", "Rasmus Lerdorf, Jim Winstead");
CREDIT_LINE("dBase", "Jim Winstead");
+ CREDIT_LINE("dotnet", "Sam Ruby");
CREDIT_LINE("FDF", "Uwe Steinmann");
CREDIT_LINE("FilePro", "Chad Robinson");
CREDIT_LINE("FTP", "Andrew Skalski");