]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/string.h
Can now skip default manifest inclusion by defining wxUSE_NO_MANIFEST
[wxWidgets.git] / include / wx / string.h
index 521b7ca966fe5d7fbd0b42cae2a716479cae622f..d082d97b7312e2c61c66c775c6be7087d087c4c0 100644 (file)
@@ -190,12 +190,19 @@ struct WXDLLEXPORT wxStringData
   // lock/unlock
   void  Lock()   { if ( !IsEmpty() ) nRefs++;                    }
 
-  // VC++ will refuse to inline this function but profiling shows that it
-  // is wrong
+  // VC++ will refuse to inline Unlock but profiling shows that it is wrong
 #if defined(__VISUALC__) && (__VISUALC__ >= 1200)
   __forceinline
 #endif
+  // VC++ free must take place in same DLL as allocation when using non dll
+  // run-time library (e.g. Multithreaded instead of Multithreaded DLL)
+#if defined(__VISUALC__) && defined(_MT) && !defined(_DLL)
+  void  Unlock() { if ( !IsEmpty() && --nRefs == 0) Free();  }
+  // we must not inline deallocation since allocation is not inlined
+  void  Free();
+#else
   void  Unlock() { if ( !IsEmpty() && --nRefs == 0) free(this);  }
+#endif
 
   // if we had taken control over string memory (GetWriteBuf), it's
   // intentionally put in invalid state
@@ -258,7 +265,7 @@ private:
   bool AssignCopy(size_t, const wxChar *);
 
   // append a (sub)string
-  bool ConcatSelf(int nLen, const wxChar *src);
+  bool ConcatSelf(size_t nLen, const wxChar *src);
 
   // functions called before writing to the string: they copy it if there
   // are other references to our data (should be the only owner when writing)