แต่ปัญหา คือการ Debug จะทำไม่ได้ เพราะ เป็น Web และถ้าต้องการทำงานในลักษณะ Interactive
Dialog ทำไม่ได้ โดยตรง การใช้งานในลักษณะ Dialog Box จะง่ายกว่า ใน C++ และ Window จะมี
Dialog อยู่แล้วคือ MFC , Microsoft Foundation Class ซึ่ง ได้พัฒนา เป็น Dotnet
การใช้งาน MFC จะใช้ใน C++
การใช้ Ruby C extension ใช้ MFC ไม่ซับซ้อน ให้ ทำการ New project ใน Visual Studio
เลือกเป็น MFC DLL
แก้ไข init_<ชื่อไฟล์ Dll> เป็น o_<ชื่อDll>
เหตุผลคือ Sketckup เป็นโปรแกรมที่ UserInterface ไม่ได้ ใช้MFC
Sketckup เขียนเอง ทำงานได้ทั้ง Windows และ Mac การจะใช้ Dialog ของ Mfc จะต้องจัดการ เรื่องสถานะของ Dialog ให้ Windows รับรู้ จึงต้องไปกำหนด ใน ไฟล์ของ MFC
///// Ruby Headers /////
#include <ruby.h>
VALUE f_Hello( VALUE self );
static VALUE g_TI_ExtTest; // module
void o_rbMfc1( void )
{
// define Module
g_TI_ExtTest = rb_define_module( "RBMFC" );
rb_define_const( g_TI_ExtTest, "VERSION", rb_str_new2( "1.0" ) );
rb_define_module_function( g_TI_ExtTest, "hi",(VALUE *)f_Hello, 0 );
}
ใน Code ของ MFC ที่สร้างให้ แทรก Code Init
extern "C" void o_rbMfc1( void );
__declspec( dllexport ) void Init_rbMfc1( void )
{
// define Module
AFX_MANAGE_STATE(AfxGetStaticModuleState());
AfxMessageBox("Hello",MB_OK);
o_rbMfc1();
}
AFX_MANAGE_STATE จะเป็นตัวควบคุม สถานะของ Dialog
ตัวอย่าง คำสั่งของ MFC ใส่ AfxMessageBox เป็น Alert Dialog ที่จะแสดง Hello เมื่อ เรียก Require ใน Ruby Sketchup
Compiler ตั้งค่าเหมือนใน บทความที่แล้ว โดยให้ Output ไปอยู่ที่ folder plugins ของ Sketchup
Compile แล้ว ทดลอง require ใน Ruby Console จะแสดงหน้าต่าง hello
การเชื่อมกับ MFC เป็นอัน สำเร็จ สำหรับ การสร้าง Dialog ของ MFC ก็ทำตามมาตราฐาน ของ MFC ทั่วไป หาจาก google หรือ youtube และต้องไม่ลืมว่าก่อนการแสดงผลต้อง ทำ AFX_MANAGE_STATE ก่อน
ไม่มีความคิดเห็น:
แสดงความคิดเห็น