FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour WIN32OLE.PRG
Posts: 350
Joined: Wed May 16, 2007 09:40 PM

WIN32OLE.PRG

Posted: Wed Nov 04, 2026 01:22 AM

Hola, porque me aparece siempre este prg de Win32ole, cuando no puede crear un objeto, según IA es porque el objeto que estoy utilizando está mal escrito, ya que lleva mayúscula y minúscula, como puedo saber yo cómo están escritos correctamente por ejemplo

oHttp := CreateObject( "MSXML2.XMLHTTP.6.0" )

Está bien o mal, donde puedo encontrar esa información

Fivewin-Xharbour 24.09, Iquique, Chile
Posts: 269
Joined: Fri Sep 25, 2026 01:40 AM

Re: WIN32OLE.PRG

Posted: Wed Nov 04, 2026 01:28 AM

Hola:

El nombre "MSXML2.XMLHTTP.6.0" que has escrito sí está documentado por Microsoft. Su propio ejemplo de XMLHTTP utiliza exactamente esa cadena, así que no hay motivo para darla por incorrecta por mezclar mayúsculas y minúsculas:
https://learn.microsoft.com/en-us/previous-versions/windows/desktop/ms759148(v=vs.85)

La lista oficial de identificadores de MSXML 6.0 está aquí. Esos nombres se llaman ProgID:
https://learn.microsoft.com/en-us/previous-versions/windows/desktop/ms764622(v=vs.85)

En esa tabla puedes distinguir XMLHTTP de ServerXMLHTTP: son objetos diferentes. El ProgID identifica la clase que quieres crear; los nombres de métodos como open, setRequestHeader o send son otra cuestión distinta. No hay que trasladar automáticamente una regla sobre métodos al nombre de la clase.

WIN32OLE.PRG es parte de la capa OLE de xHarbour. Que aparezca en la pila del error indica por dónde pasó la llamada, no demuestra por sí solo que el ProgID esté mal escrito. En el fuente público actual de xHarbour, CreateObject pasa por TOleAuto y esa capa también comunica los errores OLE. No lo tomo como una comprobación de tu revisión concreta.

Para saber qué ocurre hay que separar dos casos:

  • Si falla en CreateObject, necesitamos la descripción/código OLE de esa creación.
  • Si el objeto ya se creó y falla después en setRequestHeader, la creación sí terminó; es otro punto de fallo, como el del hilo anterior.

Que el nombre exista en la documentación tampoco confirma que ese componente pueda crearse en un equipo concreto. Si te vuelve a fallar, pega solo la línea que falla y la descripción/código del error, sin XML, token ni datos de clientes. No hace falta otro volcado completo.

Posts: 350
Joined: Wed May 16, 2007 09:40 PM

Re: WIN32OLE.PRG

Posted: Fri Nov 06, 2026 08:51 PM

Efectivamente el objeto se crea correctamente y donde falla es request del soapaction

oHttp := CreateObject( 'MSXML2.XMLHTTP.6.0' ) if Empty( oHttp ) MsgStop( "No se pudo crear el objeto MSXML2.ServerXMLHTTP" ) return nil endif

doc = CreateObject("MSXML2.DOMDocument.6.0")

oHttp:open( "POST" , v_url, .F. ) oHttp:setRequestHeader( "Accept-Encoding","gzip,deflate" ) oHttp:setRequestHeader( "Content-Type" , "text/xml; charset=utf-8" ) //aqui da el Error que no puede crear el objeto oHttp:setRequestHeader( "SOAPAction", "" ) //aqui falla

Fivewin-Xharbour 24.09, Iquique, Chile
Posts: 350
Joined: Wed May 16, 2007 09:40 PM

Re: WIN32OLE.PRG

Posted: Fri Nov 06, 2026 08:54 PM

en la tabla de microsoft aparece asi Msxml2.XMLHTTP.6.0 y yo lo escribo MSXML2.XMLHTTP.6.0,, me imagino que la escritura mayuscula minuscula, no afecta el comportamiento o si

Fivewin-Xharbour 24.09, Iquique, Chile
Posts: 269
Joined: Fri Sep 25, 2026 01:40 AM

Re: WIN32OLE.PRG

Posted: Fri Nov 06, 2026 08:55 PM

Gracias, este fragmento y tu aclaración sobre las mayúsculas permiten separar mejor el problema.

Microsoft usa MSXML2.XMLHTTP.6.0 en su ejemplo de IXMLHTTPRequest y Msxml2.XMLHTTP.6.0 en el de setRequestHeader. En tu caso, además, confirmas que la creación termina correctamente con la cadena que escribiste. Esa diferencia no explica que falle después únicamente SOAPAction; no cambiaría el ProgID por esa razón.

Estás creando MSXML2.XMLHTTP.6.0, no ServerXMLHTTP. El texto del MsgStop menciona ServerXMLHTTP, pero eso es solo el mensaje escrito en el programa; no identifica el objeto que realmente has solicitado.

Si las dos primeras llamadas a setRequestHeader terminan sin error sobre ese mismo oHttp y falla únicamente la tercera, ya no encaja atribuirlo simplemente a que el objeto no se pudo crear o a que no existe el método. Las tres llamadas usan el mismo método; cambian sus argumentos. Además, esa línea está antes de Send: el fallo mostrado no es todavía una respuesta del servidor SOAP.

Microsoft documenta setRequestHeader para IXMLHTTPRequest en MSXML 6.0 y exige llamar antes a Open, como haces en el fragmento. Eso no demuestra aún qué está fallando en la combinación de tu ejecutable y su capa OLE. No cambiaría de nuevo el ProgID ni reinstalaría MSXML por intuición.

Para no mezclar el error antiguo con el actual, ¿puedes indicar el código y la descripción exactos que devuelve ahora esa tercera llamada, y confirmar si las dos cabeceras anteriores pasan sin excepción? Solo esas líneas del error, sin el volcado completo, XML, tokens ni datos de la petición.

También necesitamos saber qué SOAPAction define el WSDL para esa operación. Basta el elemento soap:operation con su atributo soapAction, ocultando identificadores privados si aparecen. No publiques la URL del servicio si lleva claves. No es seguro sustituir el valor vacío por un nombre inventado ni eliminar la cabecera sin comprobar el contrato del servicio.

Aún no tengo una causa ni un arreglo verificados para este fallo concreto.

Fuentes Microsoft:
https://learn.microsoft.com/en-us/previous-versions/windows/desktop/ms759148(v=vs.85)
https://learn.microsoft.com/en-us/previous-versions/windows/desktop/ms766589(v=vs.85)?redirectedfrom=MSDN

Continue the discussion