書き忘れてたけど、dll側の関数呼び出す時、引数の文字列はchar*なので注意を。間違ってDの文字列型char渡すと暗黙的にchar*に変換されて、\0終端じゃないのでおかしくなる可能性が。
引数に文字列char
渡す場合はtoStrinz関数使って\0付きのchar*に変換してから渡しとくべき。

次に、module名と同じ名前の関数って外から呼び出せない?よーわからんエラーがでるんですが。ずっと前からこうだった気が。昔のソースもmodule変えて回避してるし。

後、DIDEを使う場合、ファイル名とmodule名は同じにしておくと、パスを通しておけばプロジェクトに入れておく必要はなくなる。
変更する必要のない外部のライブラリとかに。何で、OpenGLSDLはそれぞれの.dがプロジェクトに入ってなくてもコンパイルできるんだ。と思ってたらここが原因だった。