The function I want to call is a function of a class:
void D3DBase::SetTexture(const std::string& path);
When i call it with asm block it works, but It was giving an error when I built it in release mode, then when I checked it from memory I realized that I needed to shift the string offset by 4 bytes and when I tried it worked.
My question is Why should I do that? What is the reason of this?
std::string __tmpString = "";
void SetTexture(DWORD table, const std::string& str)
{
    __tmpString = str;
    __asm {
#ifdef NDEBUG
        push offset __tmpString - 0x4
#else
        push offset __tmpString
#endif
        mov ecx, table
        mov eax, 0x401FC0
        call eax
    }
}
 
    