Char array или string в качестве аргумента функции DLL?
Лучше char*, т.к. это во-первых универсальнее (можно подключить вашу либу к любому языку, который умеет в сишные либы), а во-2, как сказано выше, реализация std::string отличается у разных компиляторов.
char* - вы передаете указатель на сами данные.
string - вы передаете указатель на класс, реализация которого может существенно отличаться. Тот же самый оптимизатор кода может внести свои коррективы.