Primeros pasos
OpenADS es un proyecto CMake en C++17. Compila en Windows (MSVC), Linux (clang o gcc) y macOS (AppleClang).
Compilar
git clone https://github.com/FiveTechSoft/OpenADS
cd OpenADS
cmake --preset default
cmake --build build/default --config Release
ctest --test-dir build/default --output-on-failure -C Release
Binarios generados:
ace64.dll(Windows) /libace.so(Linux) /libace.dylib(macOS) bajobuild/default/src/Release/— el reemplazo directo del ACE.tools/serverd/openads_serverd— CLI servidor TCP.tools/bench/openads_bench— temporizador de cargas SQL multi-plataforma.
Opciones del build
OPENADS_WITH_HTTP=ON(por defecto desde v1.0.0-rc20) — compila la consola web Studio dentro deopenads_serverdy dentro deace64.dll/ace32.dll(modo LocalServer). Pasa-DOPENADS_WITH_HTTP=OFFpara excluirla.cmake -DOPENADS_WITH_TLS=ON …— habilita URIstls://enAdsConnect60. Empaquetambedtls 3.6 LTS(Apache-2.0) y la enlaza estáticamente desde v1.0.0-rc8 — cero dependencias runtime delibssl/libcrypto/mbedtls.
El ZIP de release Windows incluye ambos ace64.dll (x64) y
ace32.dll (x86) más openads_serverd_{x64,x86}.exe desde
v1.0.0-rc8, así que apps X#, Harbour-x86 y Clipper legacy eligen
la bitness correcta desde una sola descarga.
Smoke test (drop-in)
Coloca ace64.dll (o libace.so) en el PATH de una
aplicación Harbour antes de cualquier copia de SAP. Las
llamadas existentes de contrib/rddads ahora caen en OpenADS.
Compila tu propia app Harbour contra OpenADS (hbmk2 / .hbp)
El repo trae una plantilla hbmk2 lista para usar en
examples/harbour-hbmk2/
— coloca tu .prg junto a openads_demo.hbp, define
OPENADS_LIB apuntando al build de OpenADS, ejecuta hbmk2. El
.exe resultante mueve tablas DBF / CDX a través del RDD estándar
contrib/rddads de Harbour, pero cada llamada Ads* cae en
ace64.dll de OpenADS en vez de cualquier copia firmada por SAP.
:: Desde un Developer Command Prompt x64 de Visual Studio:
cd examples\harbour-hbmk2
set OPENADS_LIB=C:\OpenADS\build\default\src\Release
set PATH=C:\harbour\bin\win\msvc64;%OPENADS_LIB%;%PATH%
hbmk2 openads_demo.hbp
copy /y "%OPENADS_LIB%\ace64.dll" .
openads_demo.exe
El .hbp es deliberadamente minimal — solo las dos entradas de
enlace que cambian para OpenADS:
openads_demo.prg
-comp=msvc64
-lrddads # RDD ADS de Harbour (contrib/rddads)
-L${OPENADS_LIB}
-lace64 # Import lib de OpenADS (en vez de la de SAP)
-lrddcdx
-lrddntx
-lrddfpt
Hay una variante 32-bit (openads_demo_x86.hbp → -lace32) y
un build.sh para Linux / macOS. Para apps GUI FiveWin (FWH)
hbmk2 no basta — mira
examples/fivewin/
para build_msvc64.cmd, que replica el build estándar FWH
añadiendo rddads.lib + ace64.lib de OpenADS.
Errores típicos “mi .hbp no compila”:
| Síntoma | Causa probable |
|---|---|
unresolved external symbol AdsConnect60 (o cualquier Ads*) |
OPENADS_LIB sin definir, o toolchain incorrecto — ace64.lib es MSVC; para bcc64 / MinGW usa la lib import correspondiente. |
lib 'rddads' not found |
contrib/rddads no compilado para el -comp=… elegido. Recompila el contrib de Harbour para ese toolchain. |
Runtime ace64.dll not found |
DLL no está junto al exe ni en PATH. |
| Cadenas truncadas en un TBrowse / xBrowse | Corregido en v1.0.0-rc27 — AdsGetField ahora paddea CHAR al ancho declarado. |
AdsVersion() reporta algo como 12.0 / 11.10 |
Cargaste el ace64.dll de SAP. where ace64.dll y reordena PATH. |
Smoke test (servidor TCP + Studio)
cmake --preset default
cmake --build build/default --target openads_serverd --config Release
./build/default/tools/serverd/openads_serverd \
--port 6262 \
--http-port 6263 \
--data /ruta/a/tus/datos
Después abre http://localhost:6263/ en cualquier navegador.
Studio LocalServer (in-process)
Desde v1.0.0-rc9 la misma consola Studio queda embebida en
ace64.dll / ace32.dll. Una app Harbour / X# / Clipper que
cargue la DLL OpenADS obtiene la SPA en su propio proceso — sin
daemon. Define OPENADS_STUDIO_PORT=8080 antes de lanzar la app
para auto-arranque, o llama a AdsStudioStart(port, data_dir)
desde el código host. Detalles en Studio.
Ejecutar openads_serverd como servicio
Desde v1.0.0-rc14:
- Windows:
openads_serverd --install-service(auto-start vía SCM);--uninstall-servicelo retira. - Linux:
scripts/openads-serverd.servicees una unit systemd hardened (User=openads,ProtectSystem=strict,NoNewPrivileges). - macOS:
scripts/com.openads.serverd.plistes un launchd plist con KeepAlive on crash.
Detalle en Despliegue como servicio.