Generic Stack implementation in C-style C++
Naming seems inconsistent.

Consider prefixing all exported names with Stack, e.g. StackPush, StackPop, StackDestroy (Destory is definitely a typo).

The entity named first in a stack context is traditionally referred to as top.
Memory management is overengineered.

Every time a value is pushed memory is allocated. That's justifiable for ownership reasons (make sure to document it). However every time a value is popped memory is allocated again. This is very strange. A simple

return s-&gt;first-&gt;value;


would suffice.

Along the same line Destroy doesn't free memory (re)allocated for individual stack entries. Consider

while(s-&gt;length &gt; 0)
    free(Pop(s))

You've mention the problem with strings; I believe it is stemmed from elemSize being a property of the stack itself. Making it a property of an element would solve the problem.
As mentioned in the comments, the C code shall not include C++ headers.