Microsoftã¯æ°å¹Žåã«Visual Basic 6ïŒVB6ïŒã®ãµããŒããæ£åŒã«çµäºããŸããããVB6ã¯äŸç¶ãšããŠå¹ åºãã¬ã¬ã·ãŒãšã³ã¿ãŒãã©ã€ãºã¢ããªã±ãŒã·ã§ã³ã§å©çšãããŠããŸãããããã®ã·ã¹ãã ã¯ãããã¯ãªãã£ã¹æ¥åããéèŠãªãã¹ã¯ãããããŒã«ã«è³ããŸã§ãéèŠãªã¯ãŒã¯ãããŒãæ¯ããŠããŸããããããªãããäºææ§ã®åé¡ãã»ãã¥ãªãã£ãžã®æžå¿µã®é«ãŸãããããŠææ°ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãžã®éèŠã®é«ãŸãã«ãããVBXNUMXãã.NET Coreãžã®ç§»è¡ã¯å«ç·ã®èª²é¡ãšãªã£ãŠããŸãã
ãã®ã¬ã€ãã§ã¯ãVB6 COMçžäºéçšæ§ã.NET Coreã«çœ®ãæããæ¹æ³ã«ã€ããŠãå æ¬çãªæŠèŠã説æããŸããé¢é£ããæè¡çãªèª²é¡ãç¶²çŸ ããã¢ããªã±ãŒã·ã§ã³ãã¢ããã€ãºããããã®æŠç¥çãªéžæè¢ãæŠèª¬ããç§»è¡ãæåãããããã®å®è·µçãªæé ã瀺ããŸããã³ã³ããŒãã³ããC#ã§æžãçŽããã¬ã¬ã·ãŒããžãã¯ãçžäºéçšæ§ã©ã€ãã©ãªã§ã©ãããããgRPCãRESTãªã©ã®ææ°ã®éä¿¡ãããã³ã«ãæ¡çšãããªã©ãã©ã®ãããªéžæè¢ãéžã¶ã«ããŠãããã®èšäºã¯æ å ±ã«åºã¥ããæææ±ºå®ã«åœ¹ç«ã¡ãŸãã
äŒçµ±ããæå 端ãž
VB6 COM ããå°æ¥å¯Ÿå¿ã® .NET Core ãžã®ã·ãŒã ã¬ã¹ãªç§»è¡
詳ããèŠã SMART TS XLãŸããActiveXã³ã³ãããŒã«ãªã©ã®äžè¬çãªVB6èŠçŽ ã眮ãæããããã®å®è·µçãªã¬ã€ãã³ã¹ãèŠã€ãããŸãã CreateObject, ADODB.Recordset, FileSystemObjectãã®ã¬ã€ãã¯ãå®éã®äŸãããŒã«ã«é¢ããæŽå¯ããã¹ã ãã©ã¯ãã£ã¹ã䜿çšããŠãVB6 ã¢ããªã±ãŒã·ã§ã³ãèªä¿¡ãšæçããæã£ãŠææ°åããããã«å¿
èŠãªãã¹ãŠãæäŸããããšãç®çãšããŠããŸãã
VB6 COMçžäºéçšæ§ã®èª²é¡ãçè§£ãã
ç§»è¡æŠç¥ã«çæããåã«ãææ°ã®.NET Coreç°å¢ã§VB6 COMã³ã³ããŒãã³ãã䜿çšããéã®æ ¹æ¬çãªèª²é¡ãçè§£ããããšãéèŠã§ããCOMçžäºéçšæ§ã¯ããã©ãããã©ãŒã éã®æè¡çãªæ©æž¡ãã§ããã ãã§ãªãã倧ããç°ãªãXNUMXã€ã®ã©ã³ã¿ã€ã ã¢ãã«ãã¢ãŒããã¯ãã£ãéçºå²åŠéã®æ ¹æ¬çãªäžäžèŽãè§£æ¶ãããã®ã§ãã
COMçžäºéçšæ§ã.NET Coreã§åé¡ãšãªãçç±
COMçžäºéçšæ§ã¯ãããšããšã¢ã³ãããŒãžCOMã³ã³ããŒãã³ããš.NET Frameworkã¢ããªã±ãŒã·ã§ã³éã®éä¿¡ã容æã«ããããã«èšèšãããŸããããããã.NET CoreïŒããã³.NET 5以éïŒã§ã¯ãCOMããã€ãã£ãã«ãµããŒãããªãã¯ãã¹ãã©ãããã©ãŒã ã®é«ããã©ãŒãã³ã¹ã©ã³ã¿ã€ã ãå°å ¥ãããŠããŸããäž»ãªå¶éäºé ã¯æ¬¡ã®ãšããã§ãã
- Windows以å€ã®ãã©ãããã©ãŒã ã§ã¯COMç»é²ã®ãµããŒããçµã¿èŸŒãŸããŠããªã
- åã©ã€ãã©ãªã®çæãšäœ¿çšã®ããã®ããŒã«ãéãããŠãã
- åŸæ¥ã® ActiveX ã³ã³ãããŒã«ãšã¢ã³ãããŒãž DLL ãšã®äºææ§ã®åé¡
- å®è¡æãªã¹ã¯ã®å¢å
COMExceptionãã€ã³ãã£ã³ã°ã®åé¡ã«ãããšã©ãŒ
å€ãã®å ŽåãCOM çžäºéçšæ§ã®è€éããšè匱æ§ããåŸæ¥ã®ã³ã³ããŒãã³ããä¿æããããšã«ããçæçãªå©ç¹ãäžåãå¯èœæ§ããããŸãã
VB6 COMãš.NET Coreã®äž»ãªéã
VB6ãš.NET Coreã®ã¢ãŒããã¯ãã£ã®éããçè§£ããããšã¯ãç§»è¡ãæåãããäžã§äžå¯æ¬ ã§ããæãéèŠãªéãã«ã¯ä»¥äžãå«ãŸããŸãã
| æ©èœ | VB6 COM | .NETã³ã¢ |
|---|---|---|
| ã¡ã¢ãªç®¡ç | æåïŒåç §ã«ãŠã³ãïŒ | èªåïŒã¬ããŒãžã³ã¬ã¯ã·ã§ã³ïŒ |
| ã³ã³ããŒãã³ãç»é² | ã¬ãžã¹ããªããŒã¹ïŒCOMã¯ã©ã¹ç»é²ïŒ | ã¢ã»ã³ããªããŒã¹ïŒã¬ãžã¹ããªäŸåãªãïŒ |
| ã¯ãã¹ãã©ãããã©ãŒã ã®ãµããŒã | Windowsã®ã¿ | ã¯ãã¹ãã©ãããã©ãŒã ïŒWindowsãLinuxãmacOSïŒ |
| ã¬ã€ããã€ã³ãã£ã³ã° | åºã䜿çšãããŠããïŒäŸïŒ CreateObject) |
èœèãããã€ãããã¯ãªãµããŒããéãããŠãã |
| UIãã¯ãããžãŒ | ActiveXããã©ãŒã | WinFormsãWPFãBlazorãMAUI |
ãããã®éãã¯ãã³ã³ããŒãã³ãã®ã€ã³ã¹ã¿ã³ã¹åã管çãå®è¡æ¹æ³ã«åœ±é¿ãäžããŸãããŸãã眮ãæãæŠç¥ãããŒã«ã«é¢ããæææ±ºå®ã«ã圱é¿ãäžããŸãã
眮ãæããå¿ èŠãªäžè¬ç㪠VB6 COM ã³ã³ããŒãã³ã
ã¬ã¬ã·ãŒCOMã³ã³ããŒãã³ãã®äžã«ã¯ãä»ã®ã³ã³ããŒãã³ããããåé¡ãå€ããé »ç¹ã«ææ°åãå¿ èŠãšãªããã®ããããŸããäŸãšããŠã¯ã次ã®ãããªãã®ããããŸãã
- ActiveXã³ã³ãããŒã«: UIèŠçŽ ã®äŸ
MSFlexGrid,CommonDialogããŸãã¯ãµããŒããããªããªã£ãã«ã¹ã¿ã OCX ã³ã³ãããŒã« - ADODB.ã¬ã³ãŒãã»ãã: ããŒã¿ããŒã¹ãšã®ãããšãã«äœ¿çšãããå€ãã®å Žåã
DataTable,Entity FrameworkãŸãã¯Dapper - ãã¡ã€ã«ã·ã¹ãã ãªããžã§ã¯ã: ãã¡ã€ã«æäœã«äœ¿çšãããéåžžã¯
System.IO.NETã§ - Winsockã®: ãããã¯ãŒã¯æ©èœãçŸåšã¯
System.Net.Sockets - ã«ã¹ã¿ã DLLãšã¿ã€ãã©ã€ãã©ãªïŒ å¿
èŠãšãã
TlbImp.exeè€éãã«å¿ããŠå®å šãªæžãçŽã
èšç»ããã»ã¹ã®æ©ã段éã§ãããã®ã³ã³ããŒãã³ããç¹å®ããããšã§ãæžãæããã©ããããŸãã¯ãªãã¡ã¯ã¿ãªã³ã°ãå¿ èŠãªã¢ãžã¥ãŒã«ãåªå é äœä»ãããã®ã«åœ¹ç«ã¡ãŸãã
COMçžäºéçšæ§ã眮ãæããããã®æŠç¥
VB6ã¢ããªã±ãŒã·ã§ã³ãã¢ããã€ãºããã«ã¯ãæ¢åã®COMã³ã³ããŒãã³ããã©ã®ããã«æ±ãããæ±ºå®ããããšãäžå¯æ¬ ã§ãããã¹ãŠã®ã³ã³ããŒãã³ãã«åãç§»è¡ãã¹ãå¿ èŠãªããã§ã¯ãããŸãããæžãçŽããã³ã³ããŒãã³ããããã°ãäžæçã«ã©ããã§ããã³ã³ããŒãã³ãããããgRPCãRESTãšãã£ãææ°ã®éä¿¡ã¢ãã«ãæ¡çšããæ¹ãæé©ãªã³ã³ããŒãã³ãããããŸãã以äžã«ãäžè¬çãªXNUMXã€ã®æŠç¥ã瀺ããŸãã
- .NET Core ã§ã® COM ã³ã³ããŒãã³ãã®æžãæã
- ç§»è¡ãµããŒãã®ããã®çžäºéçšã©ãããŒã®äœ¿çš
- ããã»ã¹ééä¿¡ãææ°ã®ãããã³ã«ã«çœ®ãæãã
åãªãã·ã§ã³ã¯ããããžã§ã¯ãã®ã¿ã€ã ã©ã€ã³ãå©çšå¯èœãªãªãœãŒã¹ãæè¡çãªå¶çŽã«ãã£ãŠç°ãªããŸãã
ãªãã·ã§ã³ 1: COM ã³ã³ããŒãã³ãããã€ãã£ã .NET Core ã§æžãæãã
æžãæãã¯ãæãã¯ãªãŒã³ã§å°æ¥æ§ãèæ ®ããéžæè¢ã§ããããã¯ãææ°ã®ã©ã€ãã©ãªãšã¢ãŒããã¯ãã£ãã¿ãŒã³ã䜿çšããŠãå ã®VB6 COMã³ã³ããŒãã³ãã眮ãæããæ°ãã.NET Coreå®è£ ãæ§ç¯ããããšãæå³ããŸãã
ãã®ã¢ãããŒããéžæããå Žå:
- ã³ã³ããŒãã³ãã®å€éšäŸåé¢ä¿ã¯æå°éã§ãã
- ããžãã¹ããžãã¯ã¯ããçè§£ãããŠãã
- COMç»é²ãå®å šã«æé€ããã
䜿çšäŸ:
VB6ã³ã³ããŒãã³ãã¯ææ¬¡è²¡åã¬ããŒããèšç®ããExcelã«ãšã¯ã¹ããŒãããŸããåŸæ¥ã®Excel COM APIã䜿çšãã代ããã«ãEPPlusãªã©ã®ã©ã€ãã©ãªã䜿çšããŠ.NET Coreã¯ã©ã¹ãäœæããXLSX圢åŒã®ã¬ããŒããçæã§ããŸãããã®æ°ããã³ã³ããŒãã³ãã¯ãCOMã«äŸåããã«ãããå€§èŠæš¡ãªWeb APIããã¹ã¯ãããã¢ããªã±ãŒã·ã§ã³ã«çµ±åã§ããŸãã
Advantages:
- COMç»é²ãäºææ§ããã¯ã¯äžèŠ
- ä¿å®æ§ãšãã¹ãæ§ã®åäž
- .NET Core ã®ã¡ã¢ãªç®¡çãšéåææ©èœã®ãã«æŽ»çš
泚æç¹:
- å€§å¹ ãªãªãã¡ã¯ã¿ãªã³ã°äœæ¥ãå¿ èŠã«ãªãå ŽåããããŸã
- äžéšã®æ©èœã¯VB6ã®UIãç¶æ ã«å¯æ¥ã«çµåãããŠããå¯èœæ§ããã
ãªãã·ã§ã³2: æžãæããäžå¯èœãªå Žåã¯çžäºéçšã©ã€ãã©ãªã䜿çšãã
æžãæãã®ãªã¹ã¯ãé«ãããããæéãããããããå Žåã¯ãçžäºéçšã©ãããŒã䜿çšãããšãWindows äžã® .NET Core ã¢ããªã±ãŒã·ã§ã³å ã§ VB6 COM ã³ã³ããŒãã³ããåŒãç¶ã䜿çšã§ããŸãã
ãã®ã¢ãããŒãã䜿çšããå Žå:
- å ã®COMã³ã³ããŒãã³ãã®ãœãŒã¹ã³ãŒããäžè¶³ããŠããŸã
- ã³ã³ããŒãã³ãã¯ãå°çšã®ããŒããŠã§ã¢ãŸãã¯ãµãŒãããŒãã£ã®ãœãããŠã§ã¢ãšã€ã³ã¿ãŒãã§ãŒã¹ããŸãã
- 段éçãªç§»è¡äžã«çæçãªãœãªã¥ãŒã·ã§ã³ãå¿ èŠ
䜿çšäŸ:
æ¢åã®COMã³ã³ããŒãã³ãã¯ãåŸæ¥ã®ããŒã³ãŒãããã€ã¹ããããŒã¿ãèªã¿åããŸããããã€ã¹ã®ãã¡ãŒã ãŠã§ã¢ã®å¶çŽã«ããããããæžãæããããšã¯çŸå®çã§ã¯ãããŸããã代ããã«ãéçºããŒã 㯠TlbImp.exe çžäºéçšã¢ã»ã³ããªãçæãã.NET Core ã¢ããªãåºç€ãšãªãæ©èœã倿Žããã« COM ã€ã³ã¿ãŒãã§ã€ã¹ãåŒã³åºãããšãã§ããããã«ãªããŸãã
å®è£ ãã§ãã¯ãªã¹ã:
- ã
TlbImp.exeã¿ã€ãã©ã€ãã©ãªãã€ã³ããŒããã - COM DLLãç»é²ããã«ã¯
regsvr32ã»ããã¢ããäž - å±éã Windows ãã©ãããã©ãŒã ã®ã¿ã«å¶éãã
èæ ®ãã¹ããã¬ãŒããªã:
| ã¡ãªãã | ãã¡ãªãã |
|---|---|
| è¿ éãªçµ±å | Windowsã®ã¿ |
| æå°éã®ã³ãŒãå€æŽ | å®è¡æãšã©ãŒãçºçããå¯èœæ§ãé«ããªã |
| ã¬ã¬ã·ãŒãã€ããªããµããŒã | .NETã®æ©èœãæå€§éã«æŽ»çšã§ããªã |
ãªãã·ã§ã³3: ã¯ãã¹ããã»ã¹ããžãã¯ãgRPCãŸãã¯RESTã«ç§»è¡ãã
2ã€ã®ã¢ããªã±ãŒã·ã§ã³éã®éä¿¡ã«COMã³ã³ããŒãã³ãã䜿çšãããŠããå ŽåããããgRPCãŸãã¯RESTãµãŒãã¹ã«çœ®ãæããããšãé·æçãªæåã®è§£æ±ºçãšãªãããšããããããŸãããããã®ã¢ãããŒãã¯ããµãŒãã¹éã®ççµåã«ãããææ°ãã€ã¹ã±ãŒã©ãã«ãªãœãããŠã§ã¢èšèšããµããŒãããŸãã
ãããæå³ãæãå Žå:
- VB6ã¢ããªã±ãŒã·ã§ã³ã¯COMçµç±ã§å€éšãµãŒãã¹ãåŒã³åºããŸã
- ãã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ã«ç§»è¡ããŠãã
- ãã©ãããã©ãŒã ã®ç¬ç«æ§ãæ±ãã
ãµã³ãã«ã·ããªãª:
VB6 POSã¢ããªã±ãŒã·ã§ã³ã¯ãåšåº«ã¬ãã«ãååŸããããã«COMãµãŒãã¹ãåŒã³åºããŸãããã®ãµãŒãã¹ã¯ã.NET Coreã§ãã¹ããããgRPCãã€ã¯ããµãŒãã¹ã«çœ®ãæããããŸãããããã«ãããåŸæ¥ã®ããã³ããšã³ããšæ°ããWebããã·ã¥ããŒãã®äž¡æ¹ãããåãã€ã³ã¿ãŒãã§ãŒã¹ãä»ããŠåšåº«ããŒã¿ã«ã¢ã¯ã»ã¹ã§ããããã«ãªããŸããã
gRPCãšRESTã®æ¯èŒ:
| æ©èœ | gRPC | REST |
|---|---|---|
| ããã©ãŒãã³ã¹ | ã〠| ç©å¥æŽŸ |
| ãã€ããŒãåœ¢åŒ | ãã€ããªïŒProtobufïŒ | ããã¹ãïŒJSONïŒ |
| ãŠãŒã¹ã±ãŒã¹ | å éšãµãŒãã¹ | ãããªãã¯APIãŸãã¯å¹ åºãäºææ§ |
ãã®ã¢ãããŒãã®å©ç¹:
- COMãå®å šã«åé¿ãã
- ã¯ãã¹ãã©ãããã©ãŒã ã®äºææ§ãå®çŸ
- ã¢ãžã¥ãŒã«åŒã§ãã¹ãå¯èœãªã¢ãŒããã¯ãã£ãæšå¥š
課é¡ïŒ
- å€§å¹ ãªåèšèšãå¿ èŠ
- æ°ããã¯ã©ã€ã¢ã³ãã®å®è£ ãå¿ èŠã«ãªãå ŽåããããŸã
ã¹ããããã€ã¹ãããã®äº€æã¬ã€ã
VB6ã¢ããªã±ãŒã·ã§ã³ã.NET Coreã«ç§»è¡ããã«ã¯ãç¶¿å¯ãªèšç»ãšç¶¿å¯ãªäœæ¥ãå¿ èŠã§ããããªããã¢ã³ãã·ããããšããèãæ¹èªäœã¯é åçã§ãããçŸå®ã®ã·ã¹ãã ã§ã¯ãã®ãããªã·ã³ãã«ãªç§»è¡ã¯ã»ãŒäžå¯èœã§ããVB6ã¢ããªã±ãŒã·ã§ã³ã¯ãCOMã³ã³ããŒãã³ããã¬ã¬ã·ãŒActiveXã³ã³ãããŒã«ããããŠåä»ãã®ç·©ãèšèšãã¿ãŒã³ãšæ·±ã絡ã¿åã£ãŠããããšãå€ãããã¯ãçŸä»£ã®.NETã®ãã©ã¯ãã£ã¹ã«ãããã«ãããã³ã°ã§ããŸããã
äžåºŠã«å®å šãªæžãæãã詊ã¿ãã®ã§ã¯ãªããæ§é åãããã¹ãããã«åºã¥ã段éçãªã¢ãããŒãã¯ããªã¹ã¯ã軜æžããä¿¡é Œæ§ãåäžãããã®ã«åœ¹ç«ã¡ãŸããäŸåé¢ä¿ã®åæãUIã³ã³ããŒãã³ãã®çœ®ãæããåçãªããžã§ã¯ãã®äœæç®¡çãšãã£ãã³ã¢ã¿ã¹ã¯ãåé¢ããããšã§ãã¢ããªã±ãŒã·ã§ã³ã®åéšåãå®å šãã€æå°éã®äžæã§ç§»è¡ãããããšãä¿èšŒã§ããŸãã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãç§»è¡ãæ¯æŽããããã®æç¢ºãªã¯ãŒã¯ãããŒã®æŠèŠã瀺ããŸããåäžã®ã¢ãžã¥ãŒã«ã«åãçµãã§ããå Žåã§ããã¹ã€ãŒãå šäœãã¢ããã€ãºããå Žåã§ãããããã®æé ã¯ã.NET Core ã«ããã COM çžäºéçšæ§ã®çœ®ãæãæŠç¥ãæåãããããã®åºç€ãšãªããŸãã
ã¹ããã6: æ¢åã®VBXNUMXã¢ããªã±ãŒã·ã§ã³ã®COMäŸåé¢ä¿ãåæãã
ç§»è¡ã®æåã®ã¹ãããã¯ãã©ã®ãããªCOMãªããžã§ã¯ããååšããã©ã®ããã«äœ¿çšãããããçè§£ããããšã§ããVB6ã¢ããªã±ãŒã·ã§ã³ã¯ãçµã¿èŸŒã¿ã³ã³ããŒãã³ãããµãŒãããŒãã£è£œã®ActiveXã³ã³ãããŒã«ããããŠç€Ÿå COMã©ã€ãã©ãªãçµã¿åãããŠäœ¿çšââããããšããããããŸãããããã®ãªããžã§ã¯ãã¯ããã©ãŒã ãã¢ãžã¥ãŒã«ã§åç §ãããããå®è¡æã«åçã«äœæããããããå ŽåããããŸãã
ãŸããVB6ãããžã§ã¯ããã¡ã€ã«ã確èªãã宣èšãããŠãããã¹ãŠã®åç §ãæœåºããŸããããŒã«ã䜿çšããã°ãã·ã¹ãã ã«ç»é²ãããŠããCOMãªããžã§ã¯ããåç §ããã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããŠãããªããžã§ã¯ããç¹å®ã§ããŸãããããã®ããŒã«ã¯ã¯ã©ã¹IDãã¡ãœããå®çŸ©ãã€ã³ã¿ãŒãã§ãŒã¹ãå ¬éãããããVB6ã³ãŒããç¹å®ã®COMãªããžã§ã¯ããšã©ã®çšåºŠå¯æ¥ã«çµåãããŠãããã倿ããã®ã«åœ¹ç«ã¡ãŸãã
ããäžã€ã®äŸ¿å©ãªããŒã«ã¯Visual Basicãããžã§ã¯ããšã¯ã¹ãããŒã©ãŒã§ãã CreateObject, GetObjectããŸãã¯èªååããžãã¯ããããã®åŒã³åºãã¯ãå€ãã®å Žåãã€ãã³ããã³ãã©ããŠãŒãã£ãªãã£ã¢ãžã¥ãŒã«ã«åã蟌ãŸããŠããŸããç®æšã¯ãäŸåé¢ä¿ã®ã€ã³ãã³ããªãäœæãããããã眮æãã©ããããŸãã¯å®å
šã«åé€ããåè£ãšããŠåé¡ã§ããããã«ããããšã§ãã
äŸãã°ã CreateObject("Scripting.FileSystemObject")ã®å Žåããã®ã³ã³ããŒãã³ãã.NET System.IOã®ä»£æ¿ãšããŠåŸã§ã¿ãŒã²ããã«ããããšã¯æ¢ã«åãã£ãŠããŸããã«ã¹ã¿ã ãã«ãã©ã€ãã©ãªãžã®åç
§ã«ééããå ŽåãäŸãã° AccountingLib.AccountEngineã倿ã®å®çŸå¯èœæ§ã倿ããã«ã¯ããœãŒã¹ ã³ãŒããŸã㯠DLL ã远跡ããå¿
èŠããããŸãã
ã¹ããã2: ActiveXã³ã³ãããŒã«ãææ°ã®.NET UIã³ã³ããŒãã³ãã«çœ®ãæãã
äŸåé¢ä¿ãã«ã¿ãã°åããããæ¬¡ã®ã¿ã¹ã¯ã¯ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹å±€ã®ææ°åã§ããVB6ãã©ãŒã ã«ã¯ãç¹ã«ã°ãªãããã¥ãŒããã€ã¢ãã°ãç¹æ®ãªå ¥ååŠçãªã©ã®ããã«ãActiveXã³ã³ãããŒã«ãåã蟌ãŸããããšããããããŸãããããã®ã³ã³ããŒãã³ãã®å€ãã¯ãµããŒããããŠããããææ°ã®UIãã¬ãŒã ã¯ãŒã¯ãšã®äºææ§ã確ä¿ããã«ã¯çœ®ãæããå¿ èŠããããŸãã
äžè¬çãªäŸãšããŠã¯ã MSFlexGrid衚圢åŒã®ããŒã¿ã衚瀺ããããã«äœ¿çšãããŸãããã®ã³ã³ãããŒã«ã¯ã DataGridView WinFormsãŸã㯠DataGrid WPFã§ã¯ãéžæãã.NET Core UIãã¯ãããžãŒã«å¿ããŠãã³ã³ãããŒã«ã®çœ®ãæããå¿
èŠã«ãªããŸãããããã®çœ®ãæãã«ãããããåªããã«ã¹ã¿ãã€ãºãå¯èœã«ãªããææ°ã®ããŒã¿ãã€ã³ãã£ã³ã°æè¡ããµããŒããããŸããã¬ã€ã¢ãŠããã€ãã³ãã®åäœãç°ãªãå Žåããããããæžãæããã³ã³ãããŒã«ã¯å
ã®ã³ã³ãããŒã«ã®åäœãšæ¯èŒããŠæ€èšŒããå¿
èŠããããŸãã
ããäžã€ããããã±ãŒã¹ã¯ CommonDialog ã³ã³ãããŒã«ã¯ããã¡ã€ã«éžæãã«ã©ãŒããã«ãŒãããªã³ã¿ãã€ã¢ãã°ãªã©ãæäŸããŸãã.NET Coreã§ã¯ããããã¯éåžžã OpenFileDialog, SaveFileDialogãããã³Windowsãã©ãŒã ã©ã€ãã©ãªã®é¢é£ã³ã³ããŒãã³ããæ©èœã¯åçã§ãããäžéšã®ããããã£ããã€ã¢ãã°ã®ã«ã¹ã¿ãã€ãºãåçŸããã«ã¯ã远å ã®äœæ¥ãå¿
èŠã«ãªãå ŽåããããŸãã
ç¹ã«è€éãªãã©ãŒã ãåã蟌ã¿COMãªããžã§ã¯ããå«ãã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã³ã³ãããŒã«ãäžã€ãã€æ®µéçã«UIãåæ§ç¯ããèšç»ãç«ãŠãŸããããããžãã¹ããžãã¯ãžã®äŸå床ãäœãããªã¹ã¯ã®äœãç»é¢ããå§ããããã»ã¹ã«èªä¿¡ãæãŠãããã«ãªã£ãããããé«åºŠãªæ©èœãæã€ç»é¢ãžãšç§»è¡ããŠãããŸãã
ã¹ããã3: é å»¶ãã€ã³ãã£ã³ã°ãšåçãªããžã§ã¯ãäœæãåŠçãã
VB6ã§ã¯ãé
å»¶ãã€ã³ãã£ã³ã°ãé »ç¹ã«äœ¿çšããŠããŸãã CreateObject 颿°ãããã«ãããéçºè
ã¯æ©æãã€ã³ãã£ã³ã°ãåå®å
šæ§ãèæ
®ããã«ãå®è¡æã«COMãªããžã§ã¯ããåçã«èªã¿èŸŒãããšãã§ããŸããããã¯VB6ç°å¢ã§ã¯æè»ã§ããããå³å¯ã«åæå®ãããã³ã³ãã€ã«æžã¿ãªããžã§ã¯ãã®ã€ã³ã¹ã¿ã³ã¹åãåªå
ãã.NET Coreãžã®ç§»è¡ã§ã¯èª²é¡ãçããŸãã
ãã®æ©èœã.NET Coreã§åçŸããã«ã¯ãããã€ãã®æ¹æ³ããããŸããæãçŽæ¥çãªæ¹æ³ã¯ã Activator.CreateInstanceã¯ãã¢ã»ã³ããªãããªããžã§ã¯ããåçã«ã€ã³ã¹ã¿ã³ã¹åã§ããæ©èœã§ããããã¯ãCOMã©ãããŒã«äŸåããŠããå Žåãããã©ã°ã€ã³ã®ãããªåäœã®ããã«ãªãã¬ã¯ã·ã§ã³ã䜿çšããŠããå Žåã«é©ããŠããŸãããã ããããã©ãŒãã³ã¹ãšä¿å®æ§ã«ã¯ãã¬ãŒããªãããããŸãã
æ¬æ¥ã®äœ¿çšæ³ã CreateObject ãŠãŒãã£ãªãã£ã¯ã©ã¹ããã«ããŒãªããžã§ã¯ãã®çæãªã©ãåçŽãªåŠçã§ããã°ãçŽæ¥ã³ã³ã¹ãã©ã¯ã¿åŒã³åºãã«å€æããæ¹ãããã§ããããããã«ãããçŸä»£ã®.NETèšèšã®æšæºã§ããäŸåæ§æ³šå
¥ãšã€ã³ã¿ãŒãã§ãŒã¹ããŒã¹ããã°ã©ãã³ã°ã掻çšã§ããããã«ãªããŸãã
å®è¡æã«ã¢ã»ã³ããªãããŒãããå¿
èŠãããå Žåã¯ã Assembly.Load or Assembly.LoadFrom 䜿çšã§ããŸãããããã®ã¡ãœããã䜿çšãããšãDLLãã¡ã€ã«ã®åãããã°ã©ã ã§ã¹ãã£ã³ããŠå®è¡ã§ããŸãããã ããåçã«èªã¿èŸŒãŸããã³ã³ããŒãã³ãã®ãããã°ãå°é£ã«ãªãå¯èœæ§ããããããç¹ã«æ¬çªç°å¢ã§ã¯ãæ
éã«äœ¿çšããå¿
èŠããããŸãã
äŸãã°ãVB6ã¢ããªã±ãŒã·ã§ã³ã«æ¬¡ã®ãããªè¡ãå«ãŸããŠããå Žå Set engine = CreateObject("Legacy.AccountEngine").NETããŒãžã§ã³ã§ã¯ã次ã®ãããªã€ã³ã¿ãŒãã§ãŒã¹ãå®çŸ©ããå¿
èŠããããããããŸããã IAccountEngineãšã³ãžã³ããžãã¯ã.NETã¯ã©ã¹ã«å®è£
ããã¢ããªã±ãŒã·ã§ã³ã®ãµãŒãã¹ã³ã³ãããéããŠæ³šå
¥ããããšã§ãã³ãŒãæ§é ãšãã¹ãæ§ãåäžããŸãã
ç¹å®ã®COMã·ããªãªã®åŠç
COMçžäºéçšæ§ã®çœ®ãæãã«é¢ããäžè¬çãªæŠç¥ã¯æçšã§ãããå€ãã®VB6ã¢ããªã±ãŒã·ã§ã³ã¯ãç§»è¡æã«ç¹å¥ãªåŠçãå¿ èŠãšããç¹å®ã®ã³ã³ããŒãã³ãã«äŸåããŠããŸããããã«ã¯ãVB6ç°å¢ã«ç·å¯ã«çµ±åãããããŒã¿ã¢ã¯ã»ã¹å±€ããã¡ã€ã«æäœããããã¯ãŒã¯éä¿¡ããŒã«ãªã©ãå«ãŸããŸãããããã®ã³ã³ããŒãã³ããé©åã«åŠçããããšã¯ãææ°ã®.NET Coreã¢ãŒããã¯ãã£ãžã®ã¢ããã°ã¬ãŒãäžã«ã¢ããªã±ãŒã·ã§ã³ã®åäœãç¶æããããã«äžå¯æ¬ ã§ãã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãVB6ãããžã§ã¯ãã§ããèŠãããCOMããŒã¹ã®ã³ã³ããŒãã³ãã眮ãæããæ¹æ³ã«ã€ããŠãå®è·µçãªã¬ã€ãã³ã¹ãæäŸããŸãããããã®ã³ã³ããŒãã³ãã®åäœåçãšãåçã®ææ°ã³ã³ããŒãã³ãã«ã€ããŠæ€èšããããšã§ãããããèœãšã穎ãåé¿ããç§»è¡ããã»ã¹ãå¹çåã§ããŸãã
ADODB ã¬ã³ãŒãã»ããã .NET Core ã®ã¢ãã³ ããŒã¿ ã¢ã¯ã»ã¹ã«çœ®ãæãã
VB6ã¢ããªã±ãŒã·ã§ã³ã§æãé »ç¹ã«äœ¿çšãããã³ã³ããŒãã³ãã®äžã€ãADODBã¬ã³ãŒãã»ããã§ããããã¯ãActiveXããŒã¿ãªããžã§ã¯ããçšããŠããŒã¿ããŒã¹ãæäœããããã®æšæºã§ãããVB6ã§ã¯ãéçºè ã¯è¡ã®å埩åŠçãã«ãŒãœã«ããŒã¹ã®ããžãã¯ã®å®è¡ãUIã³ã³ãããŒã«ãžã®ããŒã¿ã®çŽæ¥ãã€ã³ããªã©ã«ã¬ã³ãŒãã»ããã䜿çšããããšããããããŸããã
.NET Coreã§ã¯ã次ã®ãããªã¢ãããŒããæšå¥šãããŸãã DataTable, DbDataReaderããããã¯DapperãEntity Framework Coreãªã©ã®ãªããžã§ã¯ããªã¬ãŒã·ã§ãã«ããããŒãå©çšã§ããŸãããããã®ããŒã«ã¯ã匷åãªåä»ããéåæãµããŒãããããŠããå®å
šãªã¡ã¢ãªç®¡çãæäŸããŸãããã现ããªå¶åŸ¡ãå¿
èŠãšããéçºè
ã«ã¯ãADO.NETãé©ããŠããŸãã SqlCommand and SqlDataReader å®å
šãª ORM ãã¬ãŒã ã¯ãŒã¯ã®ãªãŒããŒããããªãã§ãã¬ã³ãŒãã»ãã ãã¿ãŒã³ãšæç¶ãçã«äžèŽãããã®ãæäŸããŸãã
äŸãã°ãSQLã¯ãšãªã§ã¬ã³ãŒãã»ãããéããã¬ã³ãŒããã«ãŒãããVB6ã®ã¬ã¬ã·ãŒã³ãŒããããã¯ã¯ã.NET Coreã§æ¬¡ã®ããã«æžãæããããšãã§ããŸãã using ã¹ããŒãã¡ã³ããšå³å¯ã«åæå®ãããã¢ãã«ãéçºè
ã¯ãADOãšææ°ã®ããŒã¿ã¢ã¯ã»ã¹æ¹æ³ã«ãããã«ãŒãœã«åäœãããã¯ã¡ã«ããºã ããã©ã³ã¶ã¯ã·ã§ã³åŠçã®éãã«ã泚æããå¿
èŠããããŸãã
ã¬ã³ãŒãã»ãããåæãããããŒã¿æäœã«äœ¿çšãããŠããå Žåã¯ãããã DataTable ããŒã«ã«ã§èšå®ããã³å€æŽã§ããããŒã¿æ§é ã§ããããçŸä»£çãªã·ããªãªã§ã¯ãéåæLINQã¯ãšãªãšãã¥ãŒã¢ãã«ãžã®æåœ±ã«ãããããã¯ãªãŒã³ã§ãã¹ãããããæ§é ãå®çŸãããŸãã
.NET Core ã§ FileSystemObject ã System.IO ã«å€æãã
VB6ã§é »ç¹ã«äœ¿çšãããããXNUMXã€ã®äŸåé¢ä¿ã¯ããã¡ã€ã«ãšãã©ã«ãã®æäœã«FileSystemObjectã䜿çšããããšã§ãããã®ãªããžã§ã¯ãã¯æ¬¡ã®ãããªã¡ãœãããæäŸããŠããŸããã CopyFile, CreateFolder, GetFileãããã¹ã ãã¡ã€ã«ã®èªã¿æžãããã£ã¬ã¯ããªæ§é ã®ããã²ãŒãã«ãã䜿çšãããŠããŸããã
.NET Coreã§ã¯ã System.IO åå空éã¯ãã®æ©èœãå®å
šã«çœ®ãæãããã匷åã§å®å
šãªAPIãæäŸããŸãã File, Directory, Path ãã¡ã€ã«æäœã®ããã®éçã¡ãœãããæäŸããäžæ¹ã§ã FileStream and StreamReader ããé«åºŠãªãŠãŒã¹ã±ãŒã¹ãå¯èœã«ããŸãã
äŸãã°ã次ã®ãããªVB6ã¹ãããã fso.CopyFile "source.txt", "target.txt" çŽæ¥ç¿»èš³ãããš File.Copy("source.txt", "target.txt") C# ã§ã远å ã®å©ç¹ãšããŠã¯ãäŸå€åŠçã®ãµããŒããã¯ãã¹ãã©ãããã©ãŒã ã®ãã¡ã€ã« ã¢ã¯ã»ã¹ããããã¡ ã¹ããªãŒã ã«ããããã©ãŒãã³ã¹ã®åäžãªã©ãæããããŸãã
.NET Coreã§ã¯ãUnicodeãã¹ã®åŠçãå€§å¹ ã«æ¹åãããŠããŸããé·ããã¡ã€ã«åããã«ããã€ããã¡ã€ã«åã§åäœãäžå®å®ã«ãªãå¯èœæ§ããã£ãå€ãVB6ã³ãŒããšã¯ç°ãªãã.NET Coreã¯æ¡åŒµãã¹ãUTFãšã³ã³ãŒãã£ã³ã°ãå«ãææ°ã®ãã¡ã€ã«ã·ã¹ãã ãå®å šã«ãµããŒãããŠããŸãã
ç§»è¡äžã¯ããã«ããŒã¢ãžã¥ãŒã«ãã·ã§ã«ã¹ã¯ãªããå ã®æé»çãªåç §ãå«ããFileSystemObject ã®ãã¹ãŠã®äœ¿çšç®æãæ€æ»ããããšãéèŠã§ããåå©çšæ§ãšãã¹ãæ§ãåäžãããããããã¡ã€ã«åŠçã¯ãŒã¯ãããŒå šäœã .NET Core ã®æšæºåããããŠãŒãã£ãªãã£ã¯ã©ã¹ã«çœ®ãæããããšãæ€èšããŠãã ããã
VB6 Winsock ãã System.Net.Sockets ãžã®ç§»è¡
VB6ã®ãããã¯ãŒã¯ã³ãŒãã¯ãTCPãŸãã¯UDPã¡ãã»ãŒãžã®éåä¿¡ã«Winsockã³ã³ãããŒã«ã䜿çšããããšãå€ãã£ãããã®ã³ã³ãããŒã«ã¯ã€ãã³ãé§ååã®ãã©ãŒã ã§äœ¿ãããããã¯ã©ã€ã¢ã³ããµãŒããŒåããªã¢ã«ã¿ã€ã ç£èŠã¢ããªã±ãŒã·ã§ã³ã§ãã䜿ãããŠããããããæ®å¿µãªãããWinsockã¯.NET Coreã§ã¯ãµããŒããããŠããããæ°ããã©ã³ã¿ã€ã ã«ãçŽæ¥å¯Ÿå¿ãããã®ããªãã
çŸä»£çãªã¢ãããŒãã¯ã System.Net.Sockets TCPããã³UDPéä¿¡ã®äœã¬ãã«ã®å¶åŸ¡ãæäŸããåå空éãéçºè
㯠TcpClient and TcpListener ã€ã³ã¹ã¿ã³ã¹ã䜿çšããŠæ¥ç¶ã管çããéåæã®èªã¿åãããã³æžã蟌ã¿ã¡ãœããã䜿çšããŠãã©ãã£ãã¯ãå¹ççã«åŠçããŸãã
ããšãã°ãTCPçµç±ã§ãªã¢ãŒããã¬ã¡ããªãµãŒããŒã«æ¥ç¶ããVB6ã¢ããªã±ãŒã·ã§ã³ã¯ã.NET Coreã§ããã¯ã°ã©ãŠã³ããµãŒãã¹ã䜿çšããŠåäœæã§ããŸãã TcpClientã¯ãåä¿¡ããããŒã¿ã NetworkStreamãéåæçã«åŠçããŸãã
éèŠãªå€åã®äžã€ã¯ãåæã€ãã³ãåŠçããéåæã€ãã³ãåŠçãžã®å€æŽã§ãããã©ãŒã ã¬ãã«ã®ã€ãã³ãã«äŸåããŠããWinsockãšã¯ç°ãªãã.NET Coreã¯éããããã³ã°éä¿¡ãæšé²ããŠããŸãã async and awaitããã«ãããã¹ã±ãŒã©ããªãã£ãšå¿çæ§ãåäžããŸãã
ç§»è¡æã«ã¯ãéçºè ã¯é©åãªã¿ã€ã ã¢ãŠãåŠçã忥ç¶ããžãã¯ããããŠã¡ãã»ãŒãžãã¬ãŒãã³ã°ãå®è£ ããå¿ èŠããããŸãããããã®ãã¿ãŒã³ã¯ãæ°ããå®è£ ãå®éã®ç°å¢äžã§å ç¢ã§ããããšãä¿èšŒããäžã§éåžžã«éèŠã§ãã
COM çžäºéçšæ©èœã®çœ®ãæãã®ãã¹ããšãããã°
VB6ãžã®ç§»è¡ã«ãããŠCOMã³ã³ããŒãã³ãã眮ãæããããšã¯ãåã«æ°ããã³ãŒããã³ã³ãã€ã«ããã ãã§ã¯ãããŸãããæ°ããåäœãããã°ãã°åŸ®åŠã§ææžåãããŠããªãæ¹æ³ã§ã以åã®ã·ã¹ãã ã®åäœãšæŽåããŠããããšã確èªããããšãéèŠã§ããæéã®çµéãšãšãã«é²åããããžãã¹ã¯ãªãã£ã«ã«ãªæ©èœãæã¡ããŸã ã¢ã¯ãã£ããªå¯èœæ§ã®ããä»ã®ã¬ã¬ã·ãŒã³ã³ããŒãã³ããšé£æºããã·ã¹ãã ãæ±ãå Žåããã¹ããšãããã°ã¯ããã«éèŠã«ãªããŸãã
VB6ã§ã¯ãããå¯å®¹ãªã©ã³ã¿ã€ã ã¢ãã«ãæ¡çšãããŠããŸããããšã©ãŒã®æ€åºãé ããããšãå€ããåå®å šæ§ã¯æäœéã«æããããäŸå€åŠçãå šãè¡ãããªãããšããããŸãããå¯Ÿç §çã«ã.NET Coreã¯åŒ·åãªåä»ããæ§é åããããšã©ãŒåŠçããããŠåŒ·åãªãã¹ããã¬ãŒã ã¯ãŒã¯ãæäŸããŸãããã®å€åã¯å¥œãŸãããã®ã§ãããåæã«ã以åã¯é ããŠãããã°ãäžæŽåãç§»è¡ããã»ã¹äžã«è¡šé¢åããå¯èœæ§ãããããšãæå³ããŸãã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãCOMçžäºéçšæ§ã®çœ®ãæãã確å®ã«åäœããããšãä¿èšŒããããã®å®è·µçãªã¢ãããŒããèå¯ããŸããç§»è¡ããã³ã³ããŒãã³ãã®åäœãã¹ãã®äœææ¹æ³ãCOMäŸå€ãªã©ã®çžäºéçšæ§åºæã®ãšã©ãŒã®ãããã°æ¹æ³ãææ°ã®ãã°ããŒã«ãçšããåé¡ã®ãã¬ãŒã¹ãšèšºææ¹æ³ãªã©ã«ã€ããŠè§£èª¬ããŸããæ©èœã®åçæ§ãããã©ãŒãã³ã¹ã®åäžããã¹ãå®¹ææ§ã®åäžãªã©ãç®æšãäœã§ãããããã§èª¬æããããŒã«ãšãã©ã¯ãã£ã¹ã¯ã眮ãæãã®åã¹ããããèªä¿¡ãæã£ãŠæ€èšŒããã®ã«åœ¹ç«ã¡ãŸãã
ç§»è¡ãããã³ã³ããŒãã³ãã®ãŠããããã¹ã
.NET Core ã®ãŠããããã¹ãã«ãããéçºè ã¯ã³ã³ããŒãã³ããåå¥ã«æ€èšŒã§ããŸããããã¯ã以å COM ã©ã€ãã©ãªã«åã蟌ãŸããŠããããžãã¹ããžãã¯ã眮ãæããå Žåã«ç¹ã«äŸ¿å©ã§ããç§»è¡ãããã¯ã©ã¹ã¯ã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããŠèšèšããå¿ èŠããããŸããããã«ãããxUnit ã NUnit ãªã©ã®ææ°ã®ãã¬ãŒã ã¯ãŒã¯ã§ãã¹ããããããªããŸãã
ããšãã°ãè«æ±æžã®åèšãæ€èšŒãã VB6 颿°ã C# ã§æžãçŽãããŠããå Žåããã®ã¡ãœããã¯ãµãŒãã¹ã«æœåºãããããŸããŸãªãšããž ã±ãŒã¹ã®åäœãã¹ãã§ã«ããŒãããå¿ èŠããããŸãã
ãã¹ãäžã«ã¬ã¬ã·ãŒ ã³ãŒããžã®äŸåãåé¿ããããã«ãéçºè ã¯ã¢ã㯠ããŒã«ã䜿çšããŠå€éšãµãŒãã¹ãŸãã¯ããŒã¿ããŒã¹åŒã³åºãã®åäœãã·ãã¥ã¬ãŒãã§ããŸãã
äžè¬çãªã¢ã㯠ã©ã€ãã©ãªã«ã¯æ¬¡ã®ãã®ããããŸãã
- Moq (ã€ã³ã¿ãŒãã§ãŒã¹ããŒã¹ã®ã¢ãã¯çš)
- NSubstituteïŒæè»ã§æµæ¢ãªãã¹ãæ§æçšïŒ
- FakeItEasyïŒèªã¿ããããã¹ãããã«çšïŒ
Moq ã䜿çšãããã¹ãã¯æ¬¡ã®ããã«ãªããŸãã
var mockRepo = new Mock<IInvoiceRepository>();
mockRepo.Setup(x => x.GetTotal("INV001")).Returns(1200);
var service = new InvoiceValidator(mockRepo.Object);
bool result = service.ValidateMinimum("INV001", 1000);
Assert.True(result);
ããŒã¿ããŒã¹ããã¡ã€ã« ã¢ã¯ã»ã¹ãªã©ã®äŸåé¢ä¿ãåé¢ããããšã§ããã¹ãã¯ããžãã¯ã«éäžã§ãããªãã¡ã¯ã¿ãªã³ã°æã®ä¿¡é Œæ§ãé«ãŸããå埩ãé«éåãããŸãã
çžäºéçšæ§ã®åé¡ã®ãããã°
ãã¹ããã©ã¯ãã£ã¹ã«åŸã£ãŠããŠããCOMã®çœ®ãæãäœæ¥ã«ãã£ãŠã¯ã培åºçãªãããã°ãå¿ èŠãšãªãå®è¡æã®åé¡ãçºçããããšããããŸãããããã®åé¡ã¯ãäžé©åãªå倿ãäžå®å šãªã©ãããŒããããã¯VB6ãšæ¯èŒããå®è¡æã®åäœã®äžäžèŽãªã©ã«ãã£ãŠçºçããå¯èœæ§ããããŸãã
çžäºéçšæ§ã®ç§»è¡äžã«çºçããæãäžè¬çãªãšã©ãŒã®1ã€ã¯ã COMExceptionãã®äŸå€ã¯éåžžãã¬ã¬ã·ã³ã³ããŒãã³ãã®äœæãŸãã¯åŒã³åºãã«å€±æããããšã瀺ããŸãããããã®åé¡ããããã°ããéã¯ãå¿
ãæåã«ãCOM DLL ãæ£ããç»é²ãããŠããããšãããã³çæãããçžäºéçšã¢ã»ã³ããªã .NET Core ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠèªã¿èŸŒãŸããŠããããšã確èªããŠãã ããã
ãããã®ãšã©ãŒã蚺æããã«ã¯ãäŸå€ã«ãã£ãŠè¿ãããç¹å®ã®ãšã©ãŒ ã³ãŒããšã¡ãã»ãŒãžããã°ã«èšé²ãããšåœ¹ç«ã¡ãŸãã
try
{
var legacy = new LegacyComWrapper();
legacy.Execute();
}
catch (COMException ex)
{
Console.WriteLine($"COM error: {ex.Message} (HRESULT: {ex.HResult:X})");
}
HRESULTã³ãŒãã䜿çšããŠãã¬ãžã¹ããªãšã³ããªã®æ¬ èœãã¯ã©ã¹IDã®äžäžèŽãããŒãžã§ã³ã®ç«¶åãªã©ãäžè¬çãªåå ãç¹å®ããŸããMicrosoftã®å ¬åŒããã¥ã¡ã³ãããOLEViewãProcess Monitorãªã©ã®ããŒã«ã¯ããããã®ãšã©ãŒã®åå ãç¹å®ããã®ã«åœ¹ç«ã¡ãŸãã
çžäºéçšåäœã®ãã°èšé²ãšãã¬ãŒã¹
COM ã®çœ®ãæãã®åäœãæ€èšŒããéã«ã¯ãé©åãªãã°èšé²ãäžå¯æ¬ ã§ããç¹ã«ãç§»è¡ãããã¢ãžã¥ãŒã«ãæ°ååãããå€§èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã°èšé²ãäžå¯æ¬ ã§ããã¬ã¬ã·ãŒã©ãããŒã®åæåãã€ã³ããŒããããã¡ãœããã®å®è¡ãå éšãšã©ãŒåŠçãªã©ãäž»èŠãªé·ç§»ãã€ã³ãã§æ§é åããããã°èšé²ãå®è£ ããŠãã ããã
SerilogãNLogãšãã£ãææ°ã®ãã°èšé²ãã¬ãŒã ã¯ãŒã¯ã䜿ãã°ãæ§é åããããã°ãç°¡åã«ååŸã§ãããããã°ã»ãã·ã§ã³äžã«ãã£ã«ã¿ãªã³ã°ããŠç¢ºèªããããšãã§ããŸããã¬ã¬ã·ãŒé¢é£ã³ã³ããŒãã³ãã®ãã°ã«ã¯ã远跡ã容æã«ããããã«åºæã®ã«ããŽãªã§ã¿ã°ä»ãããããšãæ€èšããŠãã ããã
ããšãã°ãActiveX ãã£ãŒã ã³ã³ãããŒã«ããã€ãã£ã .NET ãã£ãŒã ã©ã€ãã©ãªã«çœ®ãæããå Žåã¯ãå ¥åããŒã¿ãšã¬ã³ããªã³ã° ãã©ã¡ãŒã¿ã®äž¡æ¹ããã°ã«èšé²ããŠãèŠèŠçãªäžäžèŽãããã°ããããããŒã¿ãŸãã¯ãã€ã³ãã£ã³ã°ã®åé¡ãšããŠè¿œè·¡ã§ããããã«ããŸãã
ã¹ããŒãžã³ã°ç°å¢ã§ã¯ãæçµçãªåãæ¿ãåã«åäœã®åäžæ§ã確ä¿ããããã«ãå ã® COM ã³ã³ããŒãã³ããšæ°ãã .NET å®è£ ã®åºåãæ¯èŒãããã¬ãŒã¹ ããžãã¯ã远å ãããšäŸ¿å©ãªå ŽåããããŸãã
ããã©ãŒãã³ã¹ãšæé©å
COMã³ã³ããŒãã³ãããã€ãã£ã.NET Coreã³ãŒãã«çœ®ãæããåŸã¯ãããã©ãŒãã³ã¹ãäžå¿çãªçŠç¹ãšãªããŸããææ°ã®ãã¬ãŒã ã¯ãŒã¯ã¯åŸæ¥ã®ãã¬ãŒã ã¯ãŒã¯ãããããã©ãŒãã³ã¹ãåªããŠããå Žåãå€ãã§ãããç¶¿å¯ãªãã¥ãŒãã³ã°ãè¡ããªãéããããã©ãŒãã³ã¹ã®åäžã¯ä¿èšŒãããŸãããå®éãCOMãããããŒãžãã³ãŒããžã®ç§»è¡ã¯ãç¹ã«ã©ãããŒãäºææ§ã¬ã€ã€ãŒããªãã¬ã¯ã·ã§ã³ãæ éã«æ€èšããã«äœ¿çšãããšããªãŒããŒããããçºçããå¯èœæ§ããããŸãã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãå€ãå®è£ ãšæ°ããå®è£ ã®ããã©ãŒãã³ã¹ã®éããæž¬å®ããæ¹æ³ãå®è¡æã®åäœã«é¢ããŠæ³šæãã¹ãç¹ããããŠã¡ã¢ãªäœ¿çšéãšçžäºéçšæ§ã®å¢çãæé©åããæ¹æ³ã«ã€ããŠèª¬æããŸããå¿çæ§ã®åäžãã¬ã€ãã³ã·ã®åæžããããŠã¡ã¢ãªãã¿ãŒã³ã.NET Coreã®ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã¢ãã«ã«é©åãããããšã¯ãå®çšŒåç°å¢ã«å¯Ÿå¿ããã·ã¹ãã ãå®çŸããããã®éèŠãªã¹ãããã§ãã
COM ãš .NET Core ã®ããã©ãŒãã³ã¹ã®ãã³ãããŒã¯
æé©åã詊ã¿ãåã«ãæç¢ºãªããŒã¹ã©ã€ã³ã確ç«ããããšãéèŠã§ãããã³ãããŒã¯ã¯ãç§»è¡åŸã«ã¢ããªã±ãŒã·ã§ã³ã®ã©ã®éšåãé ããªã£ãããéããªã£ããããããã¯äžè²«æ§ãä¿ãããŠããããç¹å®ããã®ã«åœ¹ç«ã¡ãŸããåŸæ¥ã®VB6ç°å¢ã§ã¯ãããã©ãŒãã³ã¹ã¯ãŠãŒã¶ãŒã®æèŠãã¹ããããŠã©ãã圢åŒã®ãã¹ããªã©ãéå ¬åŒã«æž¬å®ãããããšããããããŸãããäžæ¹ã.NET Coreã¯è©³çްãªãã³ãããŒã¯ããŒã«ããµããŒãããŠããŸãã
BenchmarkDotNetã䜿çšãããšãç§»è¡ããã³ã³ããŒãã³ãã®ããã©ãŒãã³ã¹ã枬å®ã§ããŸãããã®ããŒã«ã¯ããŠã©ãŒã ã¢ããå埩ãçµ±èšåæãã¡ã¢ãªãããã¡ã€ãªã³ã°ãå«ãåå¥ã®ããã©ãŒãã³ã¹ãã¹ããå®è¡ããŸããç°¡åãªãã³ãããŒã¯ã¯æ¬¡ã®ããã«ãªããŸãã
[MemoryDiagnoser]
public class ReportGenerationBenchmark
{
private readonly ReportService service = new ReportService();
[Benchmark]
public void GenerateQuarterlyReport()
{
service.Generate("Q2");
}
}
ãã®ã¿ã€ãã®ãã¹ãã§ã¯ãææ°ã®C#å®è£ ãšä»¥åã®COMã«ãŒãã³ã®å®è¡æéãã¡ã¢ãªå²ãåœãŠãäžè²«æ§ãæ¯èŒã§ããŸãããã³ãããŒã¯ã¯ããããŸã§ãŠãŒã¶ãŒããé å»¶ãäžå®å®ããå ±åãããŠããé åã«éç¹çã«å®æœããŠãã ããã
çžäºéçšã·ããªãªã«ããããªãŒããŒãããã®åæž
ã©ãããããDLLãActiveXã³ã³ãããŒã«ãªã©ãäžéšã®COMã³ã³ããŒãã³ããæ®ã£ãŠããå Žåãããã©ãŒãã³ã¹ã®äœäžãèŠãããããšããããŸããããã¯ããããŒãžãç°å¢ãšã¢ã³ãããŒãžãç°å¢éã®åŒã³åºãã倿ããããã«å¿ èŠãªããŒã·ã£ãªã³ã°ãåå ã§ããããšãå€ãã§ããããŒã·ã£ãªã³ã°ã¯ã¡ã¢ãªè² è·ãé«ããå®è¡é床ãäœäžãããå倿ãšã©ãŒãåŒãèµ·ããå¯èœæ§ããããŸãã
ãã®ãªãŒããŒããããåæžããã«ã¯:
- ããã©ãŒãã³ã¹ãéèŠãªã«ãŒãã§ã¯çžäºéçšå¢çãè¶ããé »ç¹ãªåŒã³åºããé¿ãã
- COM ãªããžã§ã¯ããžã®åç §ãç¹°ãè¿ãäœæããã®ã§ã¯ãªããã£ãã·ã¥ãã
- èªå倿ã«é Œãã®ã§ã¯ãªããå¿ èŠãªå Žåã«ã®ã¿æç€ºçãªããŒã·ã£ãªã³ã°ã䜿çšãã
ããšãã°ã次ã®ããã«ã«ãŒãå ã§ COM ã¡ãœãããåŒã³åºã代ããã«ã
for (int i = 0; i < records.Count; i++)
{
legacyCom.SetValue(i, records[i].Value);
}
倿ŽããŸã å¯èœãªå Žåã¯ãå€ããããåŠçããããåŠçã COM ã³ã³ããŒãã³ãèªäœã«ç§»åããæ¹ãå¹ççã§ããå¯èœæ§ããããŸãã
ããã«è¯ãã®ã¯ãç¹ã«ãããã¡ã€ãªã³ã°ã«ãã£ãŠãããã®çžäºéçšåŒã³åºããããã«ããã¯ã®åå ã§ããããšã確èªãããå Žåããããã®çžäºéçšåŒã³åºãã .NET ã®åçã®ãã®ã«å®å šã«çœ®ãæããããšã§ãã
ã¡ã¢ãªç®¡çã®éããçè§£ãã
VB6ãšCOMã§ã¯ãã¡ã¢ãªã¯äž»ã«åç
§ã«ãŠã³ãã«ãã£ãŠç®¡çãããŠããŸããããªããžã§ã¯ãã¯åç
§ã«ãŠã³ããXNUMXã«ãªããšè§£æŸãããŠããŸããããããã¯çè«äžã¯ããŸãæ©èœããŠããŸãããã埪ç°åç
§ãã¡ã¢ãªãªãŒã¯ãåŒãèµ·ããããšãå€ãã£ãã®ã§ããéçºè
ã¯æåã§ Set object = Nothing é©åãªã¯ãªãŒã³ã¢ãããè¡ãããããšãæåŸ
ããŸãã
.NET Coreã¯ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã䜿çšããŸããããã«ãããéçºè
ã¯æåã§åç
§ã远跡ããå¿
èŠããªããªããŸãããç°ãªããã¿ãŒã³ãå°å
¥ãããŸãããªããžã§ã¯ãã¯ãæç€ºçã«åŠçãããªãéãã䜿çšåŸããã«ã¯ç Žæ£ãããŸããã IDisposableCOM ãªããžã§ã¯ããäœ¿ãæšãŠã® .NET ãªãœãŒã¹ã«çœ®ãæããã¢ããªã±ãŒã·ã§ã³ã§ã¯ãé©åãªç Žæ£ãéåžžã«éèŠã§ãã
ç§»è¡ããã·ã¹ãã ãããŒã¿ããŒã¹æ¥ç¶ããã¡ã€ã«ãã³ãã«ãã¡ã¢ãªãããã¡ã䜿çšããŠããå Žåã¯ããããã®ã³ã³ããŒãã³ãã using ãããã¯ãæŽçããããæç¢ºãªå»æ£æŠç¥ãå®è£
ããŠãã ãããããããªããšãç¹ã«è² è·ã®é«ãã¯ãŒã¯ããŒãã§ã¯ãã¡ã¢ãªäœ¿çšéãäºæããå¢å ããå¯èœæ§ããããŸãã
ç§»è¡ããããã¡ã€ã«ã®ãšã¯ã¹ããŒãæäœãåŠçããããã®å®å šãªãã¿ãŒã³ã次ã«ç€ºããŸãã
using (var writer = new StreamWriter("output.csv"))
{
foreach (var record in data)
{
writer.WriteLine(record.ToCsv());
}
}
ãã©ãŒã«ããã¯æŠç¥
VB6ãã.NET Coreãžã®å®å šãªç§»è¡ãããã«ã¯ã§ããªãå ŽåããããŸããã¢ããªã±ãŒã·ã§ã³ãææ°ã®åçã®ã³ã³ããŒãã³ããæããªããµãŒãããŒãã£è£œã®COMã³ã³ããŒãã³ãã«äŸåããŠãããââãããžãã¹ã«ãŒã«ãäžéæãªã³ãŒãå ã«éã蟌ããããŠããããæžãæãã®ããã®ããŠã³ã¿ã€ã ã蚱容ãããªãç°å¢ã§åäœãããããå ŽåããããŸãããã®ãããªç¶æ³ã§ã¯ããã©ãŒã«ããã¯æŠç¥ã掻çšããããšã§ãéçºããŒã ã¯æ¢åã®ã·ã¹ãã ã«åœ±é¿ãäžããããšãªã段éçã«è¿ä»£åãé²ããããšãã§ããŸãã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãVB6ãš.NET Coreã䞊è¡ããŠå®è¡ããCOM+ãªã©ã®äºææ§ã¬ã€ã€ãŒã掻çšããå®å šãªã¢ããã€ãŒãŒã·ã§ã³ã«åããŠæ§ç¯ãé²ããªãããå®å®æ§ãç¶æããããã®ã¢ãããŒãã«ã€ããŠæŠèª¬ããŸãããããã®æŠç¥ã¯é·æçãªè§£æ±ºçã§ã¯ãããŸããããæ®µéçãªç§»è¡ã«ããããªã¹ã¯ã軜æžããããžãã¹ã®ç¶ç¶æ§ãç¶æããã®ã«åœ¹ç«ã¡ãŸãã
VB6 ãš .NET Core ã¢ããªã±ãŒã·ã§ã³ãäžç·ã«å®è¡ãã
æãã·ã³ãã«ãªãã©ãŒã«ããã¯ãªãã·ã§ã³ã®äžã€ã¯ãå ã®VB6ã¢ããªã±ãŒã·ã§ã³ãæ°ãã.NET Coreã¢ãžã¥ãŒã«ãšäžŠè¡ããŠå®è¡ããããšã§ããããã¯ãVB6ããã·ã§ã«ã³ãã³ãã䜿çšããŠ.NET Coreããã»ã¹ãèµ·åããããäžéãã¡ã€ã«ããœã±ããããŸãã¯ããŒã«ã«WebãµãŒãã¹ã䜿çšããŠããã»ã¹éã®éä¿¡ã確ç«ããããšã§å®çŸã§ããŸãã
äŸãã°ãVB6ãã¹ã¯ãããã·ã¹ãã ã¯ãããã¯ã°ã©ãŠã³ãã®.NET Coreã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ãåŒã³åºããŠã¬ããŒããçæããããèšç®ãå®è¡ããããã¯ã©ãŠãAPIãšçµ±åãããããªãããUIã€ã³ã¿ã©ã¯ã·ã§ã³ãåŠçããããšãã§ããŸãããã®æ¹æ³ã«ãããåŸæ¥ã®ã€ã³ã¿ãŒãã§ãŒã¹ããã®ãŸãŸç¶æããªãããæ°ããæ©èœããµãŒãã¹ãžã®ã¢ã¯ã»ã¹ãå¯èœã«ãªããŸãã
ãã®ãã€ããªããæäœã容æã«ããããã«ãéçºè ã¯å€ãã®å Žå次ã®ãã®ã䜿çšããŸãã
- ãã«ããŒãŠãŒãã£ãªãã£ãèµ·åããããã®ã³ãã³ãã©ã€ã³åŒæ°
- åæ¹åã¡ãã»ãŒãžã³ã°çšã®ååä»ããã€ããŸãã¯ãœã±ãã
- ã©ã³ã¿ã€ã éã®ããŒã¿åãæž¡ãã®ããã®äžæãã¡ã€ã«ãŸãã¯ããŒã¿ããŒã¹
ãã®ã¢ãããŒãã¯ãæ¢åã®ãŠãŒã¶ãŒã VB6 ã€ã³ã¿ãŒãã§ã€ã¹ã®ãã¬ãŒãã³ã°ãåããŠãããããã«æ°ããã·ã¹ãã ã«ç§»è¡ã§ããªãå Žåã«ç¹ã«åœ¹ç«ã¡ãŸãã
段éçãªç§»è¡ã®ããã® COM Plus ã¬ã€ã€ãŒã®äœ¿çš
VB6ã¢ããªã±ãŒã·ã§ã³ãšæ°ãã.NET Coreã¢ãžã¥ãŒã«ã®äž¡æ¹ãããžãã¯ãå
±æããå¿
èŠãããå ŽåãCOM PlusïŒCOM+ïŒã䜿çšããç§»è¡ã¬ã€ã€ãŒãããªããžãšããŠæ©èœããŸãããã®æ¹æ³ã§ã¯ã.NETã³ã³ããŒãã³ããCOMã§åç
§å¯èœãªã©ã€ãã©ãªãšããŠã©ããããæ¬¡ã®ããã«ç»é²ããŸãã regasm and tlbexp.
ããã«ãããVB6ã³ãŒãã¯.NETã³ã³ããŒãã³ãããã€ãã£ãCOMãªããžã§ã¯ãã®ããã«ã€ã³ã¹ã¿ã³ã¹åã§ããããã«ãªããŸããæéã®çµéãšãšãã«ãããžãã¹ããžãã¯ãVB6ã¢ãžã¥ãŒã«ãããããã®.NETã³ã³ããŒãã³ãã«ç§»è¡ããããšã§ãVB6ã³ãŒãããŒã¹ã®ãµã€ãºãšè€éããåæžãããæçµçã«å»æ¢ãããããšã«ãªããŸãã
ããã»ã¹ã®ç°¡ç¥åãããæŠèŠã¯æ¬¡ã®ãšããã§ãã
- .NETã¯ã©ã¹ã
[ComVisible(true)]屿§ã䜿çšããã - ã¯ã©ã¹ã©ã€ãã©ãªãšããŠã³ã³ãã€ã«ãã以äžã䜿çšããŠç»é²ããŸãã
regasm - ã¿ã€ãã©ã€ãã©ãªãçæãã
tlbexpVB6ãããžã§ã¯ãã§åç §ãã
ãã®ãœãªã¥ãŒã·ã§ã³ã¯ã¡ã³ããã³ã¹ã®è€éããããçšåºŠæããŸãããããŒã ã¯å®å šãªæžãæããè¡ããªããŠãæ©å¯æ§ã®é«ãæ©èœãéèŠãªæ©èœãææ°åã§ããŸãã
èŠããŠãããŠãã ããïŒ
- ããã¯ãCOMç»é²ããµããŒãããWindowsãã©ãããã©ãŒã ã§ã®ã¿åäœããŸãã
- ç°å¢éã§ã®ãããã°ã«ã¯è¿œå ã®èšå®ãå¿ èŠ
- VB6ã¢ããªã±ãŒã·ã§ã³ãå£ããªãããã«ããŒãžã§ã³ç®¡çãæ éã«è¡ãå¿ èŠããã
ãã©ãŒã«ããã¯æŠç¥ã¯æ°žç¶çãªãã®ã§ã¯ãããŸãããæ··ä¹±ãæå°éã«æããããŒã ãåªå 床ã®é«ãé åã®ç§»è¡ã«éäžã§ããããã«ããããã®ãã®ã§ããé©åãªèšç»ãç«ãŠãã°ãéšåçãªãã©ãŒã«ããã¯ã§ãã£ãŠããæ©èœãæäŸããªããå€ããªã£ãã³ã³ããŒãã³ããæ®µéçã«å»æ¢ããããšã§ãå®å šãªã¢ããã€ãŒãŒã·ã§ã³ãå éãããããšãã§ããŸãã
äœ¿ãæ¹ SMART TS XL COMçžäºéçšæ§ã®çœ®ãæã
ã¬ã¬ã·ãŒVB6ã¢ããªã±ãŒã·ã§ã³ã®è¿ä»£åã¯ãç¹ã«COMçžäºéçšæ§ãé¢ä¿ããå Žåã¯å°é£ã§ããæåã«ããç§»è¡ã¯æéããããããªã¹ã¯ãé«ããäžå®å šãªå Žåãå°ãªããããŸããã SMART TS XL ã¯ããã®ããã»ã¹ãå¹çåã»å éåããããã«èšèšããããå°çšã®èªååãã©ãããã©ãŒã ã§ããCOMã³ã³ããŒãã³ããActiveXã³ã³ãããŒã«ãé å»¶ãã€ã³ãã£ã³ã°ãããVB6ãã¿ãŒã³ãææ°ã®.NET Coreã³ãŒãã«çœ®ãæããããšã«éç¹ã眮ããå®å®æ§ãæãªãããšãªããã¹ããŒããšç²ŸåºŠã®äž¡æ¹ãå®çŸããŸãã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ã SMART TS XLCOMçžäºéçšæ§ã®æãè€éãªéšåãã©ã®ããã«è§£æ±ºããã®ãããããŠç§»è¡æŠç¥ã«çµã¿èŸŒãã¹ãã¿ã€ãã³ã°ã«ã€ããŠè§£èª¬ããŸããèšç»ãå§ããã°ããã§ããç¹å®ã®ã¢ãžã¥ãŒã«ãæ¢ã«ç§»è¡ããŠããå Žåã§ãã SMART TS XL æäœæ¥ã®åŽåãåæžããé倧ãªãšã©ãŒãåé¿ããé·æçãªä¿å®æ§ãåäžãããããšãã§ããŸãã
äž»ãªèª²é¡ SMART TS XL 解決ãã
SMART TS XL VB6ãã.NET Coreãžã®ç§»è¡ãé ããããé»å®³ãããããæ ¹æ¬çãªåé¡ç¹ã«å¯ŸåŠããããã«ç¹å¥ã«èšèšãããŠããŸãããã®ããŒã«ã»ããã¯ãéçºè ãçŽé¢ããæãå埩çã§ãšã©ãŒãçºçããããã¿ã¹ã¯ã®å€ããèªååããŸãã
äž»ãªãµããŒãé åã¯æ¬¡ã®ãšããã§ãã
- COMãªããžã§ã¯ãã®çœ®ãæã: VB6 COM ã³ã³ããŒãã³ããåçã® .NET Core ã¯ã©ã¹ã«èªåçã«ãããããåŸæ¥ã®ã³ãŒãããªããŒã¹ ãšã³ãžãã¢ãªã³ã°ããå¿ èŠæ§ã軜æžããŸãã
- ActiveXã³ã³ãããŒã«ã®ç§»è¡: MSFlexGrid ã CommonDialog ãªã©ã®åã蟌ã¿ã³ã³ãããŒã«ããWinForms ãŸã㯠WPF ã®ææ°ã® UI ã«çžåœãããã®ã«çœ®ãæããŸãã
- é
å»¶ãã€ã³ãã£ã³ã°è§£æ±º: 倿ããŸã
CreateObjectããã³åæ§ã®åçãã¿ãŒã³ããå³å¯ã«åæå®ãããã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹åã«çµã¿èŸŒã¿ãŸãã - ããŒã¿ã¢ã¯ã»ã¹ã®è¿ä»£å: ADODB ããã³ DAO ãã¿ãŒã³ã ADO.NETãEntity FrameworkããŸãã¯ãã®ä»ã®æšæºããŒã¿ ã¢ã¯ã»ã¹ ã¢ãããŒãã«ãªãã¡ã¯ã¿ãªã³ã°ããŸãã
- çžäºéçšæ§ããã©ãŒãã³ã¹ã®æé©å: äžéšã® COM ã³ã³ããŒãã³ãã«äŸåãããã€ããªãã ãããžã§ã¯ãã§ã®ããŒã·ã£ãªã³ã°ãšå倿ã®ãªãŒããŒããããæå°éã«æããŸãã
- èªåã³ãŒã倿: ã¢ããªã±ãŒã·ã§ã³å šäœã«äžè²«ãã翻蚳ã«ãŒã«ãé©çšããçµ±äžãããæ§é ãšååž°ã®æžå°ãä¿èšŒããŸãã
䜿çšããããšã«ããã SMART TS XLããŒã ã¯ãã³ãŒãããŒã¹ã® COM ãš .NET Core ã®äžŠè¡ããŒãžã§ã³ãç¶æããå¿ èŠæ§ãåé¿ããåŸæ¥ã®ã©ã³ã¿ã€ã ç°å¢ãžã®äŸåã軜æžã§ããŸãã
ãã€æ€èšããã SMART TS XL
SMART TS XL æåã«ããç§»è¡ã«æ°ãæããããã¯æ°å¹ŽãããäžèŠæš¡ããå€§èŠæš¡ã®ã¢ããªã±ãŒã·ã§ã³ã«æé©ã§ããç¹ã«ä»¥äžã®å Žåã«åœ¹ç«ã¡ãŸãã
- ãããžã§ã¯ãã«ã¯ãã¬ã¬ã·ãŒ COM ã©ã€ãã©ãªã«é¢é£ä»ããããæ°çŸã®ãã©ãŒã ãŸãã¯ã³ã³ãããŒã«ããããŸãã
- ããžãã¹ããžãã¯ã¯ã¢ãžã¥ãŒã«éã«åæ£ããŠãããåçãªãªããžã§ã¯ãã®äœ¿çšã«å€§ããäŸåããŠãã
- æéã¯æ©èœã®ååž°ãæå°éã«æããªããããè¿ éãªçŽåãèŠæ±ãã
- 瀟å éçºè ã¯ãåŸæ¥ã®VB6ã®å éšãCOMçžäºéçšã®ä»çµã¿ã«ç²ŸéããŠããªã
äŸãã°ãVB6ã§æ§ç¯ãããæ°åã®ã«ã¹ã¿ã ã¬ããŒããšãªã¢ã«ã¿ã€ã ãã·ã³ã€ã³ã¿ãŒãã§ãŒã¹ã³ã³ããŒãã³ããåããè£œé æ¥åãERPã·ã¹ãã ãèããŠã¿ãŸãããã®ã·ã¹ãã ãæåã§ç§»è¡ããã«ã¯ãããã¥ã¡ã³ãåãããŠããªãCOMãªããžã§ã¯ãã®è¿œè·¡ãæ¢åã®ãã£ãŒãã³ã³ãããŒã«ã®æžãæãããããŠããžãã¹ã¯ãŒã¯ãããŒã®åæ§ç¯ãå¿ èŠã«ãªããŸãã SMART TS XLããŒã ã¯ãUIãããžãã¯ãããã³ããŒã¿ ã¢ã¯ã»ã¹ ã¬ã€ã€ãŒã«åçã® .NET Core ã³ãŒããçæããã«ã¹ã¿ãã€ãºãå¿ èŠãªãã®ã ãããªãã¡ã¯ã¿ãªã³ã°ã§ããŸãã
å¥ã®ã±ãŒã¹ã§ã¯ãéèãµãŒãã¹ã¢ããªã±ãŒã·ã§ã³ãCOMããŒã¹ã®äŒèšãšã³ãžã³ã«ã¢ã¯ã»ã¹ããVB6ã¯ã©ã¹ã¢ãžã¥ãŒã«ã«å€§ããäŸåããŠããŸããã SMART TS XLãããã®ã¯ã©ã¹ ã¢ãžã¥ãŒã«ã¯ãäŸåæ§æ³šå ¥ãµããŒããåãã C# ã¯ã©ã¹ã«èªåçã«å€æãããæ°ãã .NET ãµãŒãã¹çšã®ã¯ãªãŒã³ãª API ãå ¬éãããŸãã
æ¡çš SMART TS XL ãã¹ãããªãã¡ã¯ã¿ãªã³ã°ã®å¿ èŠæ§ããªããªãããã§ã¯ãããŸããããæäœæ¥ã«ããå€æäœæ¥ã®ç¯å²ã¯å€§å¹ ã«çž®å°ãããŸããããã«ãããéçºããŒã ã¯éå»ã®ã³ãŒããéäžåçŸããã®ã§ã¯ãªããæé©åãUIã®åèšèšãæ°æ©èœã®æ§ç¯ã«éäžã§ããããã«ãªããŸãã
çŸä»£ã®ã³ãŒããçŸä»£ã®æªæ¥ïŒCOMã®çµçã¯ãããªãçºå±ã®å§ãŸã
COMçžäºéçšæ§ãåããVB6ã¢ããªã±ãŒã·ã§ã³ã®ã¢ããã€ãŒãŒã·ã§ã³ã¯ãåãªãæè¡çãªç§»è¡ã«ãšã©ãŸããŸãããé·æçãªæè»æ§ãä¿å®æ§ããããŠã¹ã±ãŒã©ããªãã£ãå®çŸããããã®æŠç¥çãªæè³ã§ããäŒæ¥ãã¯ãã¹ãã©ãããã©ãŒã ã·ã¹ãã ãã¯ã©ãŠããã€ãã£ãã¢ãŒããã¯ãã£ããããŠã»ãã¥ãªãã£éèŠã®ç°å¢ãžãšç§»è¡ããã«ã€ããCOMãžã®äŸåãæã¡åãããšã¯ãã¬ã¬ã·ãŒã¢ããªã±ãŒã·ã§ã³ã®å°æ¥æ§ã確ä¿ããããã®å¿ é ã¹ããããšãªããŸãã
ãã®ã¬ã€ãã§ã¯ã.NET Coreã§COMçžäºéçšãå°é£ã§ããçç±ãšãåŸæ¥ã®VB6ã®åäœãšã®éãã«ã€ããŠèª¬æããŸãããæ§ã ãªç§»è¡æŠç¥ãæ€èšŒããRecordsetãFileSystemObjectãWinsockãšãã£ãäžè¬çãªCOMã³ã³ããŒãã³ãã®æ±ãæ¹ãèŠçŽããæ°ããã³ãŒãã®ãã¹ãããããã°ãæé©åã®ããã®å®çšçãªæ¹æ³ã«ã€ããŠè§£èª¬ããŸããããŸãããã€ããªããå±éã«ããããã©ãŒã«ããã¯ãªãã·ã§ã³ã玹ä»ãããã®æ¹æ³ã«ã€ããŠã説æããŸããã SMART TS XL æäœæ¥ã®è² æ ã軜æžããç§»è¡ãå éã§ããŸãã
ç§»è¡ãæåãããã«ã¯ãæ©æã«æç¢ºãªæææ±ºå®ãè¡ããäœãæžãæããäœãã©ãããã¹ãããçè§£ããã¢ããªã±ãŒã·ã§ã³ã®åéšåã«ææ°ã®ãšã³ãžãã¢ãªã³ã°ææ³ãé©çšããããšãäžå¯æ¬ ã§ãããã®ç§»è¡ã«èšç»çã«ã¢ãããŒãããããŒã ã¯ããªã¹ã¯ã軜æžããææ°ã®.NETãšã³ã·ã¹ãã ã®ã¡ãªãããæå€§éã«æŽ»çšã§ããŸãã
COMçžäºéçšæ©èœã®å®å šåé€ã®ãã§ãã¯ãªã¹ã
次ã®ã¹ãããããµããŒãããã«ã¯ã次ã®ãã§ãã¯ãªã¹ãã䜿çšããŠæºåç¶æ³ãšé²æç¶æ³ãè©äŸ¡ããŠãã ããã
- VB6 ã¢ããªã±ãŒã·ã§ã³å ã®ãã¹ãŠã® COM ããã³ ActiveX äŸåé¢ä¿ãç£æ»ããŸããã?
- ã³ã³ããŒãã³ããæžãæããã©ããããŸãã¯åèšèšã®åè£ãšããŠåé¡ããŸããã?
- ãã¹ãŠã® ActiveX ã³ã³ãããŒã«ã¯åçã® .NET Core UI ã³ã³ããŒãã³ãã«ããããããŠããŸãã?
- é
å»¶ãã€ã³ãã£ã³ã°ãªããžã§ã¯ãã䜿çšãã
CreateObjectå ¥åãããä»£æ¿æ¡ã«çœ®ãæããããŸããã? - ADODB ããã³ DAO èŠçŽ ã¯ ADO.NET ãŸã㯠ORM ãã¬ãŒã ã¯ãŒã¯ã«ç§»è¡ãããŸãã?
- ç§»è¡ãããã¯ã©ã¹ãŸãã¯ãµãŒãã¹ããšã«ãã¹ã ã«ãã¬ããžãå®è£ ããŸããã?
- COM çžäºéçšæ§ã¯ãããžã§ã¯ãåç §ããã³ãã«ã ããã»ã¹ããå®å šã«åé€ãããŠããŸãã?
- ãã¹ãŠã®ãã¡ã€ã«æäœã¯ãUnicode ããµããŒããã System.IO ã«ç§»æ€ãããŠããŸãã?
- åŸæ¥ã®ãœã±ãã㯠System.Net.Sockets ãŸã㯠HTTP ããŒã¹ã®ãããã³ã«ã«çœ®ãæããããŸãã?
- ãã©ãŒã«ããã¯æ¹æ³ã䜿çšãããå Žåããããã¯æç¢ºã«ææžåãããåé€ãã¹ã±ãžã¥ãŒã«ãããŠããŸãã?
ãã®ãã§ãã¯ãªã¹ããå®äºããããšã§ãã¢ãŒããã¯ãã£ããCOMã廿¢ããããã®æç¢ºãªéçãæããŸããæ®µéçã«é²ããŠããå Žåã§ããæ¬¡ã®ãããªããŒã«ã䜿ã£ãŠäžæ°ã«å»æ¢ããå Žåã§ãã SMART TS XLç®æšã¯å€ãããŸããããè匱ã§å¯çµåããã¬ã¬ã·ãŒ ã·ã¹ãã ããå°æ¥ã®æé·ã«å¯Ÿå¿ã§ããã¯ãªãŒã³ã§ææ°ã®ã¢ããªã±ãŒã·ã§ã³ã«å€ããããšã§ãã