หลายคนที่มี code ใหญ่ๆ หรือมี DLL ที่ไม่มี code ไม่สามารถ port ได้ แต่ต้องการทำ Application ให้เป็น Win32 ก็มีทางเลือกอีกทางคือการใช้ Thunk layer ในการ เรียก 16bit API ด้วย 32bit app หรือ 16bit app เรียก 32bit API (อย่างหลังนี่ไม่ค่อยเห็น)
ซึ่งผมก็เป็นหนึ่งในนั้น....
เรื่องที่จะเล่าไม่ใช่เรื่อง Thunk layer หรือ Interoperability ของ Win16 กับ Win32 แต่เป็น Technique ที่ผมทำเอามาจาก Microsoft Excel source code (95) มาใช้กับการสร้าง Thunk layer ณ. เวลานั้น
Technique ที่ว่าคือ การทำ Token-parsing preprocessor, ซึ่งมีประโยชน์มากในการ define ชื่อ API ที่ทำให้เราสามารถจัดกลุ่มของ API ที่จะเรียกใช้เป็นหมวดหมู่ได้ง่าย (ดูตัวอย่างครับ)
#include <stdio.h>
#define GROUP_FIRST _1_
#define GROUP_SECOND _2_
#define TYPE_16 16
#define TYPE_32 32
#define METHOD_HELPER(a, b, c) a##b##c
#define METHOD(a, b, c) METHOD_HELPER(a, b, c)
int method_1_16(int x) {
printf("method_1_16 : %d\n", x);
}
int method_2_16(int x) {
printf("method_2_16 : %d\n", x);
}
int method_1_32(int x) {
printf("method_1_32 : %d\n", x);
}
int method_2_32(int x) {
printf("method_2_32 : %d\n", x);
}
int main() {
METHOD(method, GROUP_FIRST, TYPE_32);
METHOD(method, GROUP_SECOND, TYPE_16);
return 0;
}
Happy hacking!!! :)