Given that you specify a DLL (as opposed to, for example, a shared object library), you're apparently interested solely in Windows.
In this case, you basically have a couple of choices. The first (and usually simplest) is a least common denominator approach: use roughly the same interface Windows itself does: minimal mangling of names, and Microsoft's
stdcall calling convention.
The other obvious choice is to create a COM object. For a fair number of languages, a COM object makes reuse quite a bit easier, because (among other things) the COM object can be almost entirely self-describing. That is, it can contain the information needed for the other language to make use of the COM object.
COM has another advantage if you want to support using it from object oriented languages: COM allows you to export objects, not just individual functions.
COM is something of a two-edged sword though: on one hand, exporting a COM object makes life much easier for some languages that support COM really well. On the other hand, it can make life much more difficult for languages that don't.