I've heared that its very easy to add c++ code to c++/cli project (net.framework @ Visual Studio 2010)
Unfortunatelly I cant do that.
I was seraching all over the internet and I cant find any decent examples.

All I want to do is to make a function that will read all options sfrom config/config.txt file, and to show them in the checkbox item....
my previous program was written in pure c++ and i made function which read all option sfrom the text file...and it was sth like this:

void system_load()
{
      int counter=0;
      int counter1=0;
      string filename,filename1,line;
      filename="CONFIG//systems.txt";
      ifstream plik_wejsciowy (filename.c_str());
      if (plik_wejsciowy.is_open())
      while (! plik_wejsciowy.eof() )
            {
            counter++;
            getline (plik_wejsciowy,line);
            if (line == "") continue;
            comboBox1->Items->Add(line);
            }
 //---------------------------------------
	  filename1="CONFIG//affected.txt";
      ifstream plik_wejsciowy1 (filename1.c_str());
      if (plik_wejsciowy1.is_open())
      while (! plik_wejsciowy1.eof() )
            {
            counter1++;
            getline (plik_wejsciowy1,line);
            if (line == "") continue;
			comboBox2->Items->Add(line);
            }
 }

I have tried to rewrite it to load options from text file into the ComboBox1 but without result...when i add that void to the code below (form1.h) I recive thousands of errors...as if it was not written in c++..
I added new namesapce std etd...it didnt help..ofcourse I added also all "includes" to the code, but it generated some linker errors..thats all.

code of my menu:

#pragma once

namespace Templater {

	using namespace System;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;

	/// <summary>
	/// Summary for Form1
	/// </summary>
	public ref class Form1 : public System::Windows::Forms::Form
	{
	public:
		Form1(void)
		{
			InitializeComponent();
			//
			//TODO: Add the constructor code here
			//
		}

	protected:
		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		~Form1()
		{
			if (components)
			{
				delete components;
			}
		}
	private: System::Windows::Forms::MenuStrip^  menuStrip1;
	protected: 
	private: System::Windows::Forms::ToolStripMenuItem^  typeToolStripMenuItem;
	private: System::Windows::Forms::ToolStripMenuItem^  availabilityToolStripMenuItem;
	private: System::Windows::Forms::ToolStripMenuItem^  unavailabilityToolStripMenuItem;
	private: System::Windows::Forms::ToolStripMenuItem^  degradationToolStripMenuItem;
	private: System::Windows::Forms::ToolStripMenuItem^  aboutToolStripMenuItem;
	private: System::Windows::Forms::Label^  label1;
	private: System::Windows::Forms::ComboBox^  comboBox1;
	private: System::Windows::Forms::TextBox^  textBox1;
	private: System::Windows::Forms::Label^  label2;
	private: System::Windows::Forms::TextBox^  textBox2;
	private: System::Windows::Forms::Label^  label3;
	private: System::Windows::Forms::DateTimePicker^  dateTimePicker1;
	private: System::Windows::Forms::Label^  label4;
	private: System::Windows::Forms::Button^  button1;

	private:
		/// <summary>
		/// Required designer variable.
		/// </summary>
		System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		void InitializeComponent(void)
		{
			System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid));
			this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip());
			this->typeToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
			this->availabilityToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
			this->unavailabilityToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
			this->degradationToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
			this->aboutToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
			this->label1 = (gcnew System::Windows::Forms::Label());
			this->comboBox1 = (gcnew System::Windows::Forms::ComboBox());
			this->textBox1 = (gcnew System::Windows::Forms::TextBox());
			this->label2 = (gcnew System::Windows::Forms::Label());
			this->textBox2 = (gcnew System::Windows::Forms::TextBox());
			this->label3 = (gcnew System::Windows::Forms::Label());
			this->dateTimePicker1 = (gcnew System::Windows::Forms::DateTimePicker());
			this->label4 = (gcnew System::Windows::Forms::Label());
			this->button1 = (gcnew System::Windows::Forms::Button());
			this->menuStrip1->SuspendLayout();
			this->SuspendLayout();
			// 
			// menuStrip1
			// 
			resources->ApplyResources(this->menuStrip1, L"menuStrip1");
			this->menuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(2) {this->typeToolStripMenuItem, 
				this->aboutToolStripMenuItem});
			this->menuStrip1->Name = L"menuStrip1";
			// 
			// typeToolStripMenuItem
			// 
			resources->ApplyResources(this->typeToolStripMenuItem, L"typeToolStripMenuItem");
			this->typeToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(3) {this->availabilityToolStripMenuItem, 
				this->unavailabilityToolStripMenuItem, this->degradationToolStripMenuItem});
			this->typeToolStripMenuItem->Name = L"typeToolStripMenuItem";
			// 
			// availabilityToolStripMenuItem
			// 
			resources->ApplyResources(this->availabilityToolStripMenuItem, L"availabilityToolStripMenuItem");
			this->availabilityToolStripMenuItem->Name = L"availabilityToolStripMenuItem";
			this->availabilityToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::availabilityToolStripMenuItem_Click);
			// 
			// unavailabilityToolStripMenuItem
			// 
			resources->ApplyResources(this->unavailabilityToolStripMenuItem, L"unavailabilityToolStripMenuItem");
			this->unavailabilityToolStripMenuItem->Name = L"unavailabilityToolStripMenuItem";
			this->unavailabilityToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::unavailabilityToolStripMenuItem_Click);
			// 
			// degradationToolStripMenuItem
			// 
			resources->ApplyResources(this->degradationToolStripMenuItem, L"degradationToolStripMenuItem");
			this->degradationToolStripMenuItem->Name = L"degradationToolStripMenuItem";
			this->degradationToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::degradationToolStripMenuItem_Click);
			// 
			// aboutToolStripMenuItem
			// 
			resources->ApplyResources(this->aboutToolStripMenuItem, L"aboutToolStripMenuItem");
			this->aboutToolStripMenuItem->Name = L"aboutToolStripMenuItem";
			this->aboutToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::aboutToolStripMenuItem_Click);
			// 
			// label1
			// 
			resources->ApplyResources(this->label1, L"label1");
			this->label1->Name = L"label1";
			this->label1->Click += gcnew System::EventHandler(this, &Form1::label1_Click);
			// 
			// comboBox1
			// 
			resources->ApplyResources(this->comboBox1, L"comboBox1");
			this->comboBox1->FormattingEnabled = true;
			this->comboBox1->Items->AddRange(gcnew cli::array< System::Object^  >(3) {resources->GetString(L"comboBox1.Items"), resources->GetString(L"comboBox1.Items1"), 
				resources->GetString(L"comboBox1.Items2")});
			this->comboBox1->Name = L"comboBox1";
			this->comboBox1->SelectedIndexChanged += gcnew System::EventHandler(this, &Form1::comboBox1_SelectedIndexChanged);
			// 
			// textBox1
			// 
			resources->ApplyResources(this->textBox1, L"textBox1");
			this->textBox1->Name = L"textBox1";
			// 
			// label2
			// 
			resources->ApplyResources(this->label2, L"label2");
			this->label2->Name = L"label2";
			// 
			// textBox2
			// 
			resources->ApplyResources(this->textBox2, L"textBox2");
			this->textBox2->Name = L"textBox2";
			// 
			// label3
			// 
			resources->ApplyResources(this->label3, L"label3");
			this->label3->Name = L"label3";
			// 
			// dateTimePicker1
			// 
			resources->ApplyResources(this->dateTimePicker1, L"dateTimePicker1");
			this->dateTimePicker1->Format = System::Windows::Forms::DateTimePickerFormat::Short;
			this->dateTimePicker1->Name = L"dateTimePicker1";
			// 
			// label4
			// 
			resources->ApplyResources(this->label4, L"label4");
			this->label4->Name = L"label4";
			// 
			// button1
			// 
			resources->ApplyResources(this->button1, L"button1");
			this->button1->Name = L"button1";
			this->button1->UseVisualStyleBackColor = true;
			// 
			// Form1
			// 
			resources->ApplyResources(this, L"$this");
			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
			this->Controls->Add(this->button1);
			this->Controls->Add(this->label4);
			this->Controls->Add(this->dateTimePicker1);
			this->Controls->Add(this->label3);
			this->Controls->Add(this->textBox2);
			this->Controls->Add(this->label2);
			this->Controls->Add(this->textBox1);
			this->Controls->Add(this->comboBox1);
			this->Controls->Add(this->label1);
			this->Controls->Add(this->menuStrip1);
			this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::Fixed3D;
			this->MainMenuStrip = this->menuStrip1;
			this->Name = L"Form1";
			this->menuStrip1->ResumeLayout(false);
			this->menuStrip1->PerformLayout();
			this->ResumeLayout(false);
			this->PerformLayout();

		}
#pragma endregion
	private: System::Void label1_Click(System::Object^  sender, System::EventArgs^  e) {
			 }
private: System::Void comboBox1_SelectedIndexChanged(System::Object^  sender, System::EventArgs^  e) {
		 }
private: System::Void availabilityToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
			 this->Text="Notifier 1.0 - Availability";
		 }
private: System::Void unavailabilityToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
			 this->Text="Notifier 1.0 - Unvailability";
		 }
private: System::Void degradationToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
			 this->Text="Notifier 1.0 - Degradation";
		 }
private: System::Void aboutToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
			 MessageBox::Show("Notifier 1.0 by Kolendo, Michal","About",MessageBoxButtons::OK,MessageBoxIcon::Information);
		 }
};
}

Recommended Answers

All 5 Replies

If your C++ code consists of functions in a header file, then include the header file in the form you wish to use it in, and call the functions.

If your C++ code consists of class/es in a header file, then include the header
file and use the class.

I don't know why, but often times C++/CLI forces me to use dynamic memory allocation for classes:

class myclass
{
 int i;
};

//....
//in C++/CLI code:
myclass *m = new myclass();
//..use 'm'
delete m;

Check your compiler settings and make sure that /clr:pure is not set.

Edit: but you probably still need the plain /clr switch since you have the managed code in there

/clr:pure isnt set (have changed it to (/clr)
Now i recive linker errors like:

Error	48	error LNK2034: metadata inconsistent with COFF symbol table: symbol '?memmove@@$$J0YAPAXPAXPBXI@Z' (060001C2) has inconsistent metadata with (0A000324) in MSVCMRTD.lib(locale0_implib.obj)	C:\Users\Vasquez\Documents\Visual Studio 2010\Projects\Templater\Templater\LINK	Templater

my whole code is:

#pragma once

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <algorithm>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <ctime>
#include <sstream>
#include <iostream>
#include <assert.h>

using namespace std;

int i,j,k,ile_opcji,ile_opcji_kto;

void system_load()
{
      int counter=0;
      string filename,filename1,line;
      filename="CONFIG//systems.txt";
      ifstream plik_wejsciowy (filename.c_str());
      if (plik_wejsciowy.is_open())
      while (! plik_wejsciowy.eof() )
            {
            ile_opcji++;
            getline (plik_wejsciowy,line);
            if (line == "") continue;
            //comboBox1->Items->Add(line);
            }
 //---------------------------------------
      counter=0;
	  filename1="CONFIG//affected.txt";
      ifstream plik_wejsciowy1 (filename1.c_str());
      if (plik_wejsciowy1.is_open())
      while (! plik_wejsciowy1.eof() )
            {
            ile_opcji_kto++;
            getline (plik_wejsciowy1,line);
            if (line == "") continue;
			//comboBox2->Items->Add(line);
            }
 }

namespace Templater {

	using namespace std;
	using namespace System;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;

	/// <summary>
	/// Summary for Form1
	/// </summary>
	public ref class Form1 : public System::Windows::Forms::Form
	{
	public:
		Form1(void)
		{
			InitializeComponent();
			//
			//TODO: Add the constructor code here
			//
		}

	protected:
		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		~Form1()
		{
			if (components)
			{
				delete components;
			}
		}
	private: System::Windows::Forms::MenuStrip^  menuStrip1;
	protected: 
	private: System::Windows::Forms::ToolStripMenuItem^  typeToolStripMenuItem;
	private: System::Windows::Forms::ToolStripMenuItem^  availabilityToolStripMenuItem;
	private: System::Windows::Forms::ToolStripMenuItem^  unavailabilityToolStripMenuItem;
	private: System::Windows::Forms::ToolStripMenuItem^  degradationToolStripMenuItem;
	private: System::Windows::Forms::ToolStripMenuItem^  aboutToolStripMenuItem;
	private: System::Windows::Forms::Label^  label1;
	private: System::Windows::Forms::ComboBox^  comboBox1;
	private: System::Windows::Forms::TextBox^  textBox1;
	private: System::Windows::Forms::Label^  label2;
	private: System::Windows::Forms::TextBox^  textBox2;
	private: System::Windows::Forms::Label^  label3;
	private: System::Windows::Forms::DateTimePicker^  dateTimePicker1;
	private: System::Windows::Forms::Label^  label4;
	private: System::Windows::Forms::Button^  button1;

	private:
		/// <summary>
		/// Required designer variable.
		/// </summary>
		System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		void InitializeComponent(void)
		{
			System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid));
			this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip());
			this->typeToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
			this->availabilityToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
			this->unavailabilityToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
			this->degradationToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
			this->aboutToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
			this->label1 = (gcnew System::Windows::Forms::Label());
			this->comboBox1 = (gcnew System::Windows::Forms::ComboBox());
			this->textBox1 = (gcnew System::Windows::Forms::TextBox());
			this->label2 = (gcnew System::Windows::Forms::Label());
			this->textBox2 = (gcnew System::Windows::Forms::TextBox());
			this->label3 = (gcnew System::Windows::Forms::Label());
			this->dateTimePicker1 = (gcnew System::Windows::Forms::DateTimePicker());
			this->label4 = (gcnew System::Windows::Forms::Label());
			this->button1 = (gcnew System::Windows::Forms::Button());
			this->menuStrip1->SuspendLayout();
			this->SuspendLayout();
			// 
			// menuStrip1
			// 
			resources->ApplyResources(this->menuStrip1, L"menuStrip1");
			this->menuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(2) {this->typeToolStripMenuItem, 
				this->aboutToolStripMenuItem});
			this->menuStrip1->Name = L"menuStrip1";
			// 
			// typeToolStripMenuItem
			// 
			resources->ApplyResources(this->typeToolStripMenuItem, L"typeToolStripMenuItem");
			this->typeToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(3) {this->availabilityToolStripMenuItem, 
				this->unavailabilityToolStripMenuItem, this->degradationToolStripMenuItem});
			this->typeToolStripMenuItem->Name = L"typeToolStripMenuItem";
			// 
			// availabilityToolStripMenuItem
			// 
			resources->ApplyResources(this->availabilityToolStripMenuItem, L"availabilityToolStripMenuItem");
			this->availabilityToolStripMenuItem->Name = L"availabilityToolStripMenuItem";
			this->availabilityToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::availabilityToolStripMenuItem_Click);
			// 
			// unavailabilityToolStripMenuItem
			// 
			resources->ApplyResources(this->unavailabilityToolStripMenuItem, L"unavailabilityToolStripMenuItem");
			this->unavailabilityToolStripMenuItem->Name = L"unavailabilityToolStripMenuItem";
			this->unavailabilityToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::unavailabilityToolStripMenuItem_Click);
			// 
			// degradationToolStripMenuItem
			// 
			resources->ApplyResources(this->degradationToolStripMenuItem, L"degradationToolStripMenuItem");
			this->degradationToolStripMenuItem->Name = L"degradationToolStripMenuItem";
			this->degradationToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::degradationToolStripMenuItem_Click);
			// 
			// aboutToolStripMenuItem
			// 
			resources->ApplyResources(this->aboutToolStripMenuItem, L"aboutToolStripMenuItem");
			this->aboutToolStripMenuItem->Name = L"aboutToolStripMenuItem";
			this->aboutToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::aboutToolStripMenuItem_Click);
			// 
			// label1
			// 
			resources->ApplyResources(this->label1, L"label1");
			this->label1->Name = L"label1";
			this->label1->Click += gcnew System::EventHandler(this, &Form1::label1_Click);
			// 
			// comboBox1
			// 
			resources->ApplyResources(this->comboBox1, L"comboBox1");
			this->comboBox1->FormattingEnabled = true;
			this->comboBox1->Items->AddRange(gcnew cli::array< System::Object^  >(3) {resources->GetString(L"comboBox1.Items"), resources->GetString(L"comboBox1.Items1"), 
				resources->GetString(L"comboBox1.Items2")});
			this->comboBox1->Name = L"comboBox1";
			this->comboBox1->SelectedIndexChanged += gcnew System::EventHandler(this, &Form1::comboBox1_SelectedIndexChanged);
			// 
			// textBox1
			// 
			resources->ApplyResources(this->textBox1, L"textBox1");
			this->textBox1->Name = L"textBox1";
			// 
			// label2
			// 
			resources->ApplyResources(this->label2, L"label2");
			this->label2->Name = L"label2";
			// 
			// textBox2
			// 
			resources->ApplyResources(this->textBox2, L"textBox2");
			this->textBox2->Name = L"textBox2";
			// 
			// label3
			// 
			resources->ApplyResources(this->label3, L"label3");
			this->label3->Name = L"label3";
			// 
			// dateTimePicker1
			// 
			resources->ApplyResources(this->dateTimePicker1, L"dateTimePicker1");
			this->dateTimePicker1->Format = System::Windows::Forms::DateTimePickerFormat::Short;
			this->dateTimePicker1->Name = L"dateTimePicker1";
			// 
			// label4
			// 
			resources->ApplyResources(this->label4, L"label4");
			this->label4->Name = L"label4";
			// 
			// button1
			// 
			resources->ApplyResources(this->button1, L"button1");
			this->button1->Name = L"button1";
			this->button1->UseVisualStyleBackColor = true;
			// 
			// Form1
			// 
			resources->ApplyResources(this, L"$this");
			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
			this->Controls->Add(this->button1);
			this->Controls->Add(this->label4);
			this->Controls->Add(this->dateTimePicker1);
			this->Controls->Add(this->label3);
			this->Controls->Add(this->textBox2);
			this->Controls->Add(this->label2);
			this->Controls->Add(this->textBox1);
			this->Controls->Add(this->comboBox1);
			this->Controls->Add(this->label1);
			this->Controls->Add(this->menuStrip1);
			this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::Fixed3D;
			this->MainMenuStrip = this->menuStrip1;
			this->Name = L"Form1";
			this->menuStrip1->ResumeLayout(false);
			this->menuStrip1->PerformLayout();
			this->ResumeLayout(false);
			this->PerformLayout();

		}
#pragma endregion
	private: System::Void label1_Click(System::Object^  sender, System::EventArgs^  e) {
			 }
private: System::Void comboBox1_SelectedIndexChanged(System::Object^  sender, System::EventArgs^  e) {
		 }
private: System::Void availabilityToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
			 this->Text="Notifier 1.0 - Availability";
		 }
private: System::Void unavailabilityToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
			 this->Text="Notifier 1.0 - Unvailability";
		 }
private: System::Void degradationToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
			 this->Text="Notifier 1.0 - Degradation";
		 }
private: System::Void aboutToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
			 MessageBox::Show("Notifier 1.0 by Kolendo, Michal","About",MessageBoxButtons::OK,MessageBoxIcon::Information);
		 }
};
}

I'm always a bit confused by the interaction of the managed and unmnanaged code. I think pointers are still one of those dicey areas at that interface. When you're compiling under /clr:pure, it's mandatory to use the "marshalas" functions to shuttle data from one side to the other. When you relax the /clr level, I thought that the two sets of code were more cooperative, but that may not be the case. This is something I'd have to look up.

I will have to investigate that problem too..
Unfortunatelly I have program written in c++ ..All I need is to add only a windows GUI interface..its very easy to do in VC++..but the rest is more complicated...
especially adding my c++ voids to the proggy.
I have managed to write that load config void in visual c++
But I think it will be pain in the ass (for me) to rewrite everything.
Visual C++ (cli/c++) has way less examples than pure c++...I cannot find any...
But maybe with help of this forum I will be able to rewrite it?
its very easy program..it will replace some key words in html file...with the text typed in GUI interface...
so probably I will need to rewrite sth like that too:

void FindAndReplace( std::string& tInput, std::string tFind, std::string tReplace ) 
{ 
     size_t uPos = 0; 
     size_t uFindLen = tFind.length(); 
     size_t uReplaceLen = tReplace.length();
if( uFindLen == 0 )
{
   return;
}

for( ;(uPos = tInput.find( tFind, uPos )) != std::string::npos; )
{
    tInput.replace( uPos, uFindLen, tReplace );
    uPos += uReplaceLen;
}

}

this code replace the word by the other word.
Program will read html file..if it will meet SYSTEM text in it..It will replace it with the text i want (taken from the text field in form)

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.