Unfortunately, I don't use MFC in my coding projects, so my advice will be somewhat incomplete. We get this problem alot in Interop operations when passing data (often strings or structs) to native pre-.NET C++ functions in compiled DLLs. The basic problem is the way the Interop marshaler processes the data; the default behavior has limited applicability with user-defined data structures. This is particularly a problem in COM, as many of the data structures are defined as types that have no compatible type in .NET. The solution in .NET is to use attributes to control the marshaling behavior of the Interop when the default behavior is inappropriate, as in this case. I suggest that you review the MarshalAs(UnmanagedType) attribute documentation over at MSDN. In all honesty, I don't what the correct usage would be, but, hopefully you won't have to write a custom marshal routine (because it's such a pain in the ass). Try reading this: Deafult Behavior for Strings: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpcondefaultmarshalingforstrings.asp[^] ..or, this, the MarshalAs(UnmanagedType) Enumeration: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemruntimeinteropservicesunmanagedtypeclasstopic.asp[^]