There are several considerations:
- Do you have the source for dlls?
- How much do you intend to call those dlls?
- How complex are the APIs of dlls, and your usage?
Depending of the answers.
Create bindings if:
- You will call dlls frequently. Direct call is much faster.
- You have the source and check how good they are. Otherwise you may have huge problems with memory leaks, calling conventions etc.
- APIs of dlls are not too complex, so you won't need to send C++ objects to them, etc. Or implmenet a lot work already done in exe.
Use executables:
- If you need to run them only occasionally. Overhead of creating another process does not matter to you.
- If you not sure about quality of the code. It will be much safer and robust for your code, not to load some badly implemented dll. You can always try to run .exe several times if a problem occurs. But it a dll crashes your app, you can't do anything.
- If the API is very complex, and exe have a lot of functionality, that you will have to reimplement.