Forums

Forums (http://www.abandonia.com/vbullet/index.php)
-   Programming (http://www.abandonia.com/vbullet/forumdisplay.php?f=25)
-   -   C# versus C++ (http://www.abandonia.com/vbullet/showthread.php?t=26633)

Japo 11-02-2011 09:01 PM

C# versus C++
 
I found this funny and quite eloquent. In this MSDN walkthrough article there are alternative samples in different COM-aware languages. This is one of them in C#:

Code:

using System;
using SideBySideLib;

class Example
{
  static void Main()
  {
      var obj = new SideBySideClassClass();
      Console.WriteLine(obj.Version());
      Console.ReadLine();
  }
}

To do the same in C++ you have to (and thank God you have Visual Studio):

Quote:

Create a new Visual C++ Win32 Console Project called client in a sibling folder relative to the SideBySide project's folder. In the Win32 Application Wizard, on the Application Settings tab, check the Add support for ATL check box.

Edit stdafx.h and add the following line at the top of the file, immediately after the #pragma once:
Code:

#define _WIN32_DCOM
Also in stdafx.h add the following line at the bottom of the file:
Code:

#import "..\deployed\SideBySide.dll" no_namespace
Replace the contents of client.cpp with this code:
Code:

#include "stdafx.h"
#include <iostream>
using namespace std;

void ErrorDescription(HRESULT hr)
{
    TCHAR* szErrMsg;
    if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|
      FORMAT_MESSAGE_FROM_SYSTEM, NULL, hr,
      MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
      (LPTSTR)&szErrMsg, 0, NULL) != 0)
  {
        cout << szErrMsg << endl;
        LocalFree(szErrMsg);
    }
  else
        cout << "Could not find a description for error 0x"
          << hex << hr << dec << endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
  CoInitializeEx(0, COINIT_MULTITHREADED);

  {
      ISideBySideClassPtr ptr;
      HRESULT hr = ptr.CreateInstance(__uuidof(SideBySideClass));
      if (SUCCEEDED(hr))
      {
        cout << ptr->Version() << endl;
      }
      ErrorDescription(hr);

      char c;
      cin >> c;
  }

  CoUninitialize();

  return 0;
}


Wow.

Acero 12-02-2011 08:25 PM

C# is great and so much more time efficient. But I'll always have a special place in my heart for C++, there is something that just looks so elegant about how complicated it is. :perv:

Quote:

Originally Posted by Japo (Post 422876)
I found this funny and quite eloquent. In this MSDN walkthrough article there are alternative samples in different COM-aware languages. This is one of them in C#:

Code:

using System;
using SideBySideLib;

class Example
{
  static void Main()
  {
      var obj = new SideBySideClassClass();
      Console.WriteLine(obj.Version());
      Console.ReadLine();
  }
}

To do the same in C++ you have to (and thank God you have Visual Studio):



Wow.


Japo 13-02-2011 02:07 AM

I like C, and it was my first language (well second after QBasic really), but I never really got to learn and use the C++ superset. For a systems programming language with modern features, I think it would be much better if C++ were replaced with D (not gonna happen):

http://www.digitalmars.com/d/

KrazeeXXL 17-02-2011 11:31 PM

I hate 'em both.

BASIC FTW! XD

Japo 19-02-2011 04:55 PM

Aw man I hate Basic syntax. Dim, Call, Sub, Function, line breaks...? Eew. :P

_r.u.s.s. 20-02-2011 05:30 PM

does basic even support objects?

Japo 20-02-2011 10:38 PM

Well there are thousands of different little-known languages in the Basic family alive today, they only have the keywords in common.

As for (Microsoft) Visual Basic .NET, it supports objects as per the .NET Framework just like C#, actually in principle you can do with it whatever you can do with C# (except some fringe features), you can really translate between the two line by line most of the time, and MSDN always has samples for both C# and VB on each page. But it was C# that was designed as the main .NET language, VB.NET was made afterwards as a way to accommodate programmers of previous versions of VB into the new platform.

As for Microsoft Visual Basic 6.0, it did support objects partially, but without inheritance, only one default constructor that couldn't have any paramters... But most VB programmers never created their own objects besides GUI Forms, unless they needed to author a COM/ActiveX component. And because of the Basic philosophy of "making things easier" for beginners, Forms aren't treated like classes even though they're derived classes under the hood, and an instance is created automatically with the name of the class, so when VB programmers move to .NET they don't even understand the difference between a class and an instance of it.

Basic should be killed with fire. :P


The current time is 11:46 PM (GMT)

Powered by vBulletin® Version 3.7.1
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.