← All docs

Choosing the EDIABAS implementation

Test0 talks to BMW ECUs through an api64.dll that implements the EDIABAS API. Two implementations exist:

Implementation Source When to use
EdiabasLib (default, shipped with Test0) Open-source, by Ulrich Holeschak. Self-contained 64-bit. You don't have BMW's tools installed, or you want a fully self-contained Test0 install.
BMW EDIABAS Comes with BMW ISTA / Tool32 / INPA. Lives at C:\EDIABAS\Bin. You already have a BMW install on this machine and want to use exactly what BMW's own tools use.

Test0 ships with EdiabasLib and works out of the box — no setup needed. Just setup your adapter in settings. About 80% of users will never read past this line. The rest of this document is for the 20% who want to switch to BMW's implementation.


Switching implementations

Open Tools → Settings... → EDIABAS. Near the top there's a combo:

Which EDIABAS implementation are you using? [ EdiabasLib | BMW EDIABAS ]

Pick the one you want, click Apply, restart Test0. That's the whole procedure. No file renames, no DLL copying, no PATH editing.

How it works under the hood

Older Test0 builds put api64.dll next to testo.exe, which meant switching implementations required physically renaming files (Windows always loads api64.dll from the exe directory first, before consulting %PATH%). Current builds avoid that:

Either way, by the time the first EDIABAS call fires, Windows is set up to load the right DLL.

The combo is the single source of truth. Restart is required only because the DLL search path is fixed at first-load time.

Prerequisites for BMW EDIABAS

You need BMW's tools installed (ISTA / Tool32 / INPA — any of them deposits the EDIABAS runtime at C:\EDIABAS\Bin). Verify by opening a Command Prompt and running:

where api64.dll

You should see C:\EDIABAS\Bin\api64.dll. If not, BMW's installer didn't add C:\EDIABAS\Bin to your system PATH — add it manually under System Properties → Environment Variables → Path.

ECU files come from BMW's own EcuPath= entry in C:\EDIABAS\Bin\ediabas.ini. The ECU files label at the bottom of the ECU Jobs window confirms which folder Test0 is reading from.


What's currently loaded

Same Settings page, the Currently loaded panel near the bottom shows the path of the DLL Windows actually mapped into Test0, plus version and copyright. Use it to verify your combo choice matches reality:

Field EdiabasLib BMW EDIABAS
Copyright Ulrich Holeschak BMW AG, created by Softing AG
FileVersion 8.x.x.x 7.3.0 (typical)
Size ~6 MB ~24 KB (it's a shim)

If the panel is empty / says "api64.dll not loaded into this process", Test0 hasn't made any EDIABAS call yet. Trigger one — e.g. open File → Detect ECU, or run a script that calls scripting.apiInit() — then reopen Settings.

If the panel disagrees with the combo (e.g. combo says BMW but Currently loaded shows EdiabasLib), check that you restarted Test0 after changing the combo. The DLL is locked into the process on first load and can't be swapped live.


Detecting where EDIABAS lives on this machine

Click the Menu button at the bottom-left of the Settings dialog → Detect EDIABAS installations.... The detector scans:

The dialog lists every candidate it finds. This is discovery only — it doesn't switch implementations (the combo does that).


Troubleshooting

ECU dropdown is empty / "no ECUs found" / wrong list Wrong implementation combo, or the ECU files path doesn't point where you expect. Open ECU Jobs window — at the bottom there's an "ECU files: …" label showing the absolute folder Test0 is actually reading from. If that's wrong, fix the combo in Settings → EDIABAS → Apply, restart Test0, then re-open ECU Jobs.

Could not load file or assembly 'ApiInternal, Version=…' The EdiabasLib payload in <install>/ediabaslib/ is incomplete — one of the five files is missing. Reinstall Test0 to restore them.

Test0 starts but every job times out / no ECU response (with BMW EDIABAS) BMW's api64.dll is a tiny shim that spawns a 32-bit helper process (api64.exe) which loads the real EDIABAS engine (ebas32.dll). If any of those are missing from C:\EDIABAS\Bin, the shim can't start its helper. Reinstall BMW's tools to restore the full set.

Settings panel says Currently loaded: (api64.dll not loaded into this process) Test0 hasn't called any EDIABAS function yet. Trigger one — File → Detect ECU, or run a script — then reopen Settings.

Currently loaded shows the wrong DLL after switching the combo Restart Test0. Windows locks api64.dll into the process on first load and won't swap it live.

BMW EDIABAS loads but jobs fail with API errors Open ediabas.ini (Settings → Menu → Open ediabas.ini location). Common things to check: Interface= (STD:OBD, STD:OMITEC etc. — must match your adapter), EcuPath= actually exists and contains .prg files, Simulation=0 if you want real comms.

I have an older Test0 install with api64.dll next to testo.exe The installer for current builds deletes the old top-level Api64.dll/ApiInternal.dll/apiNET464.dll/EdiabasLib.dll/EdiabasLib.config (and any *.disabled rename leftovers) before laying down the new subfolder layout. If you're updating manually from a zip, delete those files yourself first — otherwise Windows finds the stale top-level copy and the combo can't switch you to BMW.

Startup warning: "EdiabasLib not found" Combo is set to EdiabasLib but Test0 can't find Api64.dll in either the ediabaslib/ subfolder or next to testo.exe. Either reinstall Test0 to restore the bundled files, or switch the combo to BMW EDIABAS if that's what you actually want.

Using BMW EDIABAS from a non-default install (Rheingold / Program Files / etc.) Test0's BMW path resolver probes a few common locations and walks %PATH%, but it can miss unusual installs. Open Settings → EDIABAS → Menu → Detect EDIABAS installations... once; picking your install from the list saves the path to testo.ini, and the ECU resolver picks it up on the next start. (After the DLL has been loaded once, the resolver also uses its actual on-disk location, so this only matters for the very first ECU operation after install.)


Why a combo and not auto-detection?

Auto-detecting the loaded implementation requires calling EDIABAS once at startup (which loads api64.dll into the process so its identity can be read). That takes 1–3 seconds on first run — visibly slow.

The combo trades that for a static config: EdiabasLib is the bundled default (so first-run works), and BMW users flip the combo once. The choice is persisted in testo.ini under [ediabas] implementation. Change it any time via Settings; restart Test0 for the new DLL search path to take effect.