วันพฤหัสบดีที่ 21 มิถุนายน พ.ศ. 2555

การนำ C# มาใช้งาน กับ Ruby C/C++ ภาคที่ 2 ติดต่อกับRuby


-Thanaphan In.
ในบทที่แล้ว ได้แนะนำการใช้งานที่ ให้สร้าง C# เป็น Com Interface สำหรับให้ โปรแกรม อื่นใน window สามารถ ติดต่อกันได้ ได้ สำหรับ การใช้งาน กับ ภาษา Ruby ไม่ว่าจะเป็น  Sketchup หรือ Ruby on Rail ก็สามารถใช้งานได้ 2 ทาง คือ ผ่าน Interface ของ C/C++ หรือ ผ่าน “win32ole” สำหรับ win32ole มีตัวอย่างบน Internet พอสมควรแล้ว(ค้นใน Google “ruby win32ole”) สำหรับ การใช้ C/C++ มีขอที่ดีคือสามารถใช้ Debuger ของ Visual Studio ดูระหว่างทำงานได้ เพื่อสะดวกการสร้าง เป็น Class Interface ระหว่าง C++ กับ C# การเขียนโปรแกรมจะได้ ใช้ Visual Studio เป็นส่วนใหญ่

ไปที่ตัวอย่างที่สร้าง Dialog บน MFC สร้างปุ่มกด
Add C#  และมี EditBox  ตามรูป


สำหรับหัวไฟล์ ให้ใส่เพิ่ม #import

#include "stdafx.h"
#include "winsock.h"
#include "ruby.h"
#include "rbMfc1.h"
#include "rbDlgMFC1.h"
#include "rubyutils.h"

#import "Mathlib.tlb" raw_interfaces_only




ที่ EditBox add Variable ด้วยกดเมาวส์ขวา ชื่อ c_Edit1
สร้างคำสั่งสำหรับปุ่มแรก

void CtestCallManageDlg::OnBnClickedButton1()
{
      // TODO: Add your control notification handler code here
    HRESULT hr= CoInitialize(NULL); // เริ่ม Interface
MathLib::IAddClassPtr pIAddClass(__uuidof(CAddClass));//คลาสใน C#
        long result=0;
        hr=pIAddClass->Add(10,20,&result);//Function ใน Interface C#
       
        CoUninitialize();// จบ Interface
        CString outt;
        outt.Format(_T("%d"),result);
        this->c_Edit1.SetWindowTextW(outt);
}



สำหรับ Form ให้ สร้างอีกปุ่ม (การสร้างให้กด double Click ที่ปุ่ม)
void CtestCallManageDlg::OnBnClickedButton2()
{
      // TODO: Add your control notification handler code here
 HRESULT hr= CoInitialize(NULL);

 MathLib::IForm1Ptr pIForm(__uuidof(CiForm1));
        long result=0;
         hr= pIForm->aForm(&result);//Function ในการเรียก Form
        CoUninitialize();
        CString outt;
     
        outt.Format(_T("%d"),result);
       // this->c_Edit1.SetWindowTextW(outt);

}


จากนั้น Build และทำการ Copy Mathlib.dll ไปที่ google..\plugins ไม่นั้นจะทำงานไม่ได้




ไม่มีความคิดเห็น:

แสดงความคิดเห็น