Converting Between MFC/C++ and .NET Types

WEBINAR: On-demand webcast

How to Boost Database Development Productivity on Linux, Docker, and Kubernetes with Microsoft SQL Server 2017 REGISTER >

Welcome to this week's installment of .NET Tips & Techniques! Each week, award-winning Architect and Lead Programmer Tom Archer from the Archer Consulting Group demonstrates how to perform a practical .NET programming task using either C# or Managed C++ Extensions.

Many .NET methods are very picky about the types that you can pass as parameters. For example, the sockets, cryptography, and several of the streaming methods require byte arrays, which you must first convert from CString objects or C++ types. In addition, despite the fact that IJW alleviates many conversion issues, several situations still require you to manually convert a .NET type to a C++ type. As a result, converting between types is frequently a sticking point for coders new to mixing MFC and .NET.

This article illustrates some basic conversion code that should help you if you find yourself about to throw your monitor against the wall after the latest "can't convert x to y" compiler error message!

Converting CString objects to a .NET Byte array

CString str = _T("CString to be converted to a byte array");
Byte barr[] = new Byte[str.GetLength()];
for(int i   = 0; i < str.GetLength(); i++)
   barr[i]  = static_cast<Byte>(str [i]);

Converting String objects to a C++ char array

#include <vcclr.h>    // Needed for the PtrToStringChars function
//...
String* s = S"String to be converted to a char array";
const __wchar_t __pin * str = PtrToStringChars(s);

Converting String objects to a .NET Byte array

String* str = S"String to be converted to a byte array";
Byte barr[] = new Byte[str->Length];
for(int i=0; i<str->Length; i++)
   barr[i] = static_cast<Byte>(str->ToCharArray()[i]);

Converting Int32 objects to a managed char array

Int32 myInt = 42;
unsigned char myArray __gc[] = BitConverter::GetBytes(myInt);

Got More?

This is by no means meant to be a complete compilation of all conversions between MFC/C++ and .NET. However, it will handle the majority of the cases you face. If you would like to add a conversion, just drop me a line. If I add it to the article, I'll, of course, give you credit for the input.



About the Author

Tom Archer - MSFT

I am a Program Manager and Content Strategist for the Microsoft MSDN Online team managing the Windows Vista and Visual C++ developer centers. Before being employed at Microsoft, I was awarded MVP status for the Visual C++ product. A 20+ year veteran of programming with various languages - C++, C, Assembler, RPG III/400, PL/I, etc. - I've also written many technical books (Inside C#, Extending MFC Applications with the .NET Framework, Visual C++.NET Bible, etc.) and 100+ online articles.

Comments

  • There are no comments yet. Be the first to comment!

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • On-demand webcast Continuous integration and continuous deployment (CI/CD) allow DevOps teams to be more efficient. When starting from a production environment, the use of Microsoft SQL Server 2017 in Docker containers and Kubernetes clusters can facilitate a DevOps CI/CD pipeline. Using SQL Server tools also allows you to easily integrate core DevOps application lifecycle management practices to database development. Watch this on-demand presentation to learn how defining the database dependency as …

  • Whether you're wondering if the title of "developer" should have your name next to it or you've just started on the path to software success, consider this guide your personal README.md file. (And if that reference didn't make sense to you, read on. It will soon, grasshopper.) This software developer resource guide explores just how in-demand developers are and the growing gap of qualified individuals needed, discusses the many benefits and perks of being a developer, and enlightens you on the myriad of …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date