This could be a timing problem in the initialization sequence. When you call exeFunc, the gSome array might not be initialized yet.
When calling anotherdllfunc, it is guaranteed that gSome will have been initialized by that time. That is why you see different values, but the same address.
Let me also point out that calling
will transfer the argument by value, which means that the entire structure of gSome[i] is copied to the stack. Probably going by const reference would be a better way.