2011-09-13 9 views
5

Si lo hago LoadLibrary("%windir%\\system32\\ole32.dll") significa que Windows SOLO cargará desde "c: \ windows \ system32 \ ole32.dll"? También LoadLibrary() en C entiende la variable de entorno?¿LoadLibrary analiza las variables de entorno como% windir%

+1

No dos veces, no expande variables de entorno y no comprenderá los códigos de escape en su cadena. Y un programa de 32 bits estará sujeto a la redirección del sistema de archivos en un sistema operativo de 64 bits, cargando desde c: \ windows \ syswow64 en su lugar. –

Respuesta

6

como dijo Serge y probado cuidadosamente, LoadLibrary no sustituye la variable de entorno en la ruta.

Sin embargo, hay una función en la API de Windows para reemplazar variables de entorno en cadenas: ExpandEnvironmentStrings(). puede realizar la sustitución requerida en su ruta antes de llamar al LoadLibrary().

4

El docs for LoadLibrary establecen claramente que:

Si la cadena especifica una ruta completa, la función sólo busca en ese camino para el módulo.

Dicho esto, no mencionan el soporte para la sustitución de variables de entorno. Dudo seriamente que apoyen la sustitución de variables de entorno: es una característica de shell, no una API de kernel.

Por cierto, eso significa LoadLibrary() consideraría como una ruta relativa ya que no comienza con una letra de unidad o una ruta UNC. Por lo tanto, miraría a través de toda la serie de directorios, buscando un subdirectorio llamado %windir%, ¡que probablemente no encuentre!

Lo di una prueba rápida: confirma mi opinión. Error = 126: No se pudo encontrar el módulo especificado.

+0

Sí, no expande variables de entorno. –

Cuestiones relacionadas