อยากถามคนที่รู้จัก Delphi , C++ , C# , .NET ช่วยเมนต์ให้หน่อยว่าผมเข้าใจผิดถูกอย่างไร หัดภาษาใหม่ทรมานมาก

กระทู้คำถาม
ผมเป็นมือปืนรับจ้างเขียนโปรแกรมด้วย Delphi 7 มานาน เพราะยังไงโปรแกรมผมก็ run บน Windows อย่างเดียวอยู่แล้ว ไม่เคยจะคิดข้ามแพลตฟอร์ม
เพราะเคยพยายามไปทำ linux แล้ว hardware อะไรก็ไม่ support เลย (อุปกรณ์หลายตัวที่ใช้อยู่ไม่มี Driver linux มาให้)

ปัญหาก็เริ่มมาจากเดี๋ยวนี้คนใช้ Delphi น้อยลง ผู้จ้าง อยากให้เขียนบน Visual Studio C++,หรือ C# ยิ่งเป็น .NET ยิ่งดี
ผมเข้าใจว่า .NET เป็น Visual Machine ชนิดหนึ่ง มีจุดเด่นคืน สามารถทำงานข้ามระบบเครือข่ายได้  แต่ App ส่วนใหญ่ที่ผมทำมันไม่ใช่ระบบดาต้าเบสคับ มันเป็นเรื่องของ Hardware เป็นส่วนใหญ่เช่น รับภาพจาก กล้อง รับข้อมูลจากเครื่องอ่านบัตรแม่เหล็ก รับจาก serial port เอามาประมวลผลแล้วสั่งงานต่อ หรือแสดงผลออกมาในเครื่องเดิม ทำไมต้องทำเป็น .NET ด้วยไม่เข้าใจ  

1. ผมเข้าใจเกี่ยวกับ .NET ถูกไหมว่าว่ามันจะทำงานช้า เพราะต้องแปลตอน runtime อีกที และมีประโยชน์กว่าแค่ข้ามแพลดฟอร์มหรือทำงานข้ามเครือข่ายได้

2. ผมพยายามใช้ Visual C# ก่อน เขียนโค๊ดง่ายคล้าย Delphi แต่ปรากฏว่าการที่มันออกแบบมาสำหรับ .NET ทำให้มันไม่มีฟังชั่นติดต่อ DLL และ API ของ Windows เช่น Avicap ,  Winscard, comm function ไม่ได้ ถ้าจะเรียกใช้จริงๆก็ต้องแปลงโค๊คพวก MarshalAs อะไรนี่ดูยุ่งมาก  ผมเข้าใจถูกปล่าวครับ

3. ผมลองพยายามใช้ Visual C++ ตัวนี้ดีหน่อย มีฟังชั่นติดต่อ API มาพร้อมกว่า Delphi อีก แต่เท่าที่ลองใช้ มันก็ไม่ Visual จริง อุปกรณ์ต่างๆต้องเขียนโค๊ดมาแปะ ถึงแสดงผล ขนาดแค่วาง Editbox แล้ว รับข้อมูล ยังไม่สามารถ access ผ่าน componet แบบ C# หรือ Delphi ได้ แล้วฟังชั่นต่างๆ ก็แทบไม่มีให้ใช้เลย อย่างฟังก์ช์่น ของ DateTime ของ C++ เองไม่มีให้ใช้เลย ผมจะแปลง "1/1/2012" เข้าไปในตัวแปลชนิด Date แค่เนี้ย หาเป็น ชม.ยังไม่เจอเลย help ไป msdn เจอแต่ของ C# ใน .NET Frame work
จริงๆแล้วตัว Visual C++ ถ้าไม่ต้องเรียกใช้ .NET Frame work นี่มันมีฟังชั่นอื่นๆที่ไม่ใช้แค่พื่นฐานของ C สมัยก่อนพวก printf หรือ sin sout ไหมครับ  จะ using library ต่างๆที่เจอใน MSDN นี่ ไม่ได้เลย ไม่มีตลอด แค่ using system; ก็ไม่เจอแล้ว

4.ลองหาทางให้เป็น Visul C++ เป็น Visaul แล้วก็เจอว่า ต้องใช้ Template ชื่อ Windows Forms Application (ถูกตัดออกแล้วใน Visual Studio 2012 ที่ผมหัดใช้)  ซึ่งก็จะแปลงเป็น .NET และมีปัญหาในการติดต่อ API ของ Windows เช่นเดียวกับ C# ถูกต้องไหมครับ

จริงๆ อยากพยายามใช้ Visual Studio ตามชาวบ้านเขาเหมือนกัน แต่ทำไมมันเขียนยากจัง นี่เป็นอาทิตย์แล้วยังไปไม่ถึงไหน ถ้าผมเขียนด้วย Delphi เสร็จไปนานแล้ว
คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 2
ผมก็เคยใช้ delphi มา ที่จริง หากเข้าใจ c# ได้เหมือนเข้าใจ delphi
โค้ดมัน แปลงได้ เกือบหมด เลยน้ะ  แต่ผมก็ไม่เก่ง c# เหมือน บน delphi
แต่อันที่จริง บอก(ไม่ความลับหรอก ใครๆ ก็อาจทำกันผมหล่ะคนนึง)
ให้นิดว่า หากเขียน delphi เป็นแล้ว ทำให้เป็น dll แล้วใช้ c# เรียก แบบ dynamic
เอาก็ได้ ผมก็ทำแบบนี้ประจำ เวลา นำเสนอ ก็บอก โปรแกรม สร้าง จาก c#.net
โหจะดูเท่ห์มากๆ  แต่ที่ไหนได้ .dll บานเลย แล้วมีทั้ง c,masm,delphi ที่ compile แล้วแปลงเป็น .dll
แล้วใช้ c# เรียกเอา คือ พูดง่ายๆ ว่า หน้าจอ GUI สวยงาม  ต่อ database เป็น c# ทั้งหมด
    แต่ หากเชื่อม ต่อ ระบบ hardware เชื่อระบบ ไฟล์ลึกๆ พิเศษๆ
ก็ใช้ภาษาที่ถนัด พัฒนาเอา แล้วเนียนใช้ c# เรียก แค่นี้แหละ ไม่มีใครรู้หรอก
แต่คนพัฒนา ต่อ คงสาบแช่ง น้ะ เห็นโค้ด คง โห นี้ code here อะไรนี้
แมร่งทุกภาษาเลย


ผมมีตัวอย่างง่ายๆ เวลาเรียก dynamic dll เป็นแค่แนวคิด

delphi XE3

program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
  Windows, System.SysUtils;
var
  messageBox : function (HWnd: Integer; Text, Caption: PWideChar; Flags: Integer): Integer; stdcall;
  hMod: hModule;

begin
  try

    hMod := LoadLibrary('user32.dll');
    @messageBox := GetProcAddress(hMod, 'MessageBoxW');
    messageBox(0, pwidechar('text'), pwidechar('caption'), 0);

  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.



c#.net 2012

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace callapitest
{
    class Program
    {
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        static extern int MessageBox(IntPtr hWnd, String text, String caption, int options);

        static void Main(string[] args)
        {
            MessageBox(IntPtr.Zero, "Text", "Caption", 0);
        }
    }
}



    ตอบ เรื่อง vc++ ให้นิดนึง เคยใช้มาบ้าง
    ผมเคยใช้ vc++ 6 มาก่อน ยิ่งงงหนักไปใหญ่ เพราะ vc++ ตั้งแต่ version 2005 ขึ้นมายัน 2012
vc++ จะมี  แบบ ปกติ และแบบ .net แต่ 2012 ก็เปลี่ยนอะไรอีกก็ไม่รู้ ผมเลยเลิกเล่นเลย งง กับมันจริงๆ  
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่