-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 ไม่นั้นจะทำงานไม่ได้