วันอังคารที่ 19 มิถุนายน พ.ศ. 2555

สร้าง Application บน Sketchup ด้วย C# ภาคที่1 C# COM

ในบทก่อนหน้านี้ ผมได้แนะนำการใช้ MFC C/C++ ในการสร้าง Application บน Ruby Sketchup แต่สำหรับคนเขียนโปรแกรมเมื่อเทียบกับ C# แล้ว ก็ถือว่า ยัง ยากอยู่มาก ในปัจจุบัน โปรแกรม ที่เขียนบน Dotnet C# มีจำนวนมาก และ มี Class สำเร็จรูป ดีๆ เช่น ฐานข้อมูล การเชื่อมกับ Office Excel หรือ Internet เป็นต้้น และ มีตัวอย่าง C# เช่นใน Codeproject.com ทำให้การสร้าง Application ซับซ้อนสูง ทำได้ อย่างรวดเร็ว โดยเฉพาะการทำ Dialog หรือ Form C# เขียนง่ายมาก เมืื่อเทียบกับ Ruby หรือ MFC C/C++
สำหรับ Sketchup มี Ruby เป็นภาษาในการพัฒนาโปรแกรมเสริม และเราสามารถใช้ C/C++ ในการพัฒนาเชื่อมต่อ ได้ในบทความก่อนหน้านี้ สำหรับ C# มีสถานะที่ต่างกัน เนื่องจาก C# เป็น Manage Code การที่ C/C++ จะเรียก Manage Code ซึ่งเป็น Subset ที่ใหญ่กว่า จะยากกว่า ที่ Managed Code C# เรียก Unmanaged C/C++ มาก   Microsoft ได้เปิดช่องใว้ทางเดียว คือต้องทำให้ Managed Code C# เป็น COM หรือ Component Object Model อันเป็นระบบเก่าแก่ของ Microsoftในการเชื่อม ระหว่างโปรแกรมด้วยกัน
ถ้าดูจากวิธีที่จะใช้ C# เข้าไปใน Sketchup นั้น จะเป็นไปตาม Diagram นี้

[Ruby] <----- C/C++ ----> [MFC C/C++] <----- COM----->[C# DotNet]


เร่ิมต้น เราสร้าง Project สำหรับ C# Class ก่อน โดยเปิด Visual Studio 2008 หรือ 2010
และสร้าง Class ตามตัวอย่าง จะเห็นได้ว่า มี Interface เป็นการตั้ง Type สำหรับการติดต่อ กับโปรแกรม
อื่น ตัวอย่างนี้ มี 2  Interface เป็นตัวอย่าง คำนวน บวกค่า และ ตัวอย่างในการแสดง Dialog


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace MathLib
{
    public interface IAddClass
    {
        int Add(int a, int b);
    }
    public class CAddClass : IAddClass
    {
        public int Add(int a, int b)
        {
            return a + b;
        }
       

        public interface IForm1
        {
            int aForm();
        }

        public class CiForm1 : IForm1
        {

            public int aForm()
            {
               
                if (MessageBox.Show("HELLO") == DialogResult.OK)
                {
                    return 1;
                }
                return 0;
            }

        }
    }
}


ก่อนที่จะ Compile ให้สร้าง Stong Name เพื่อให้โปรแกรม Dll ที่ Compile นี้ เป็น Unique
สำหรับโปรแกรมอื่น ไปที่ Visual Studio ->Utitliy->Command Prompt

sn -k myClass.SNK 

ทำการ Copy  SNK นี้ ไปที่ โครงการที่กำลังทำอยู่ จากนั้น Add เข้าไปใน Project 
และ สำหรับการ Build   การ Compile ให้ตั้งค่าที่ Post Build  ใน Build Event

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\regAsm.exe <ชื่อโปรแกรม>.dll /tlb:MathLib.tlb /codebase



จะสร้าง tlb สำหรับให้ C/C++ รู้จัก
สำหรับ ใน โครงการ ให้แก้ AssemblyInfo.cs


[assembly: ComVisible(true)]
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("myClass.SNK")]

จากนั้น ให้ ทำการ Compile โปรแกรม จะได้ Dll พร้อมกับ Tlb สำหร้บ ทำการ Include ใน C/C++ ต่อไป เป็นอันสิ้นสุดการทำ COM ให้ C# ชุดนี้






1 ความคิดเห็น: