Changeset 500 in dev for trunk/ab5.0/abdev/abdev/abdev.cpp
- Timestamp:
- Apr 23, 2008, 1:57:14 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ab5.0/abdev/abdev/abdev.cpp
r499 r500 88 88 #endif 89 89 90 91 void CreateProcessWithStdHandle( const std::string &appPath, const std::string &cmdLine)92 {93 std::string argsStr = (std::string)"\"" + appPath + "\" " + cmdLine;94 STARTUPINFO si;95 PROCESS_INFORMATION pi;96 memset(&si,0,sizeof(STARTUPINFO));97 si.cb=sizeof(STARTUPINFO);98 si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;99 si.wShowWindow = SW_HIDE;100 si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);101 si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);102 si.hStdError = GetStdHandle(STD_ERROR_HANDLE);103 104 char args[8192];105 lstrcpy( args, argsStr.c_str() );106 107 CreateProcess( NULL, args, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi );108 }109 90 110 91 void ToBigChar(char str[]){ … … 1344 1325 LRESULT CALLBACK WindowFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){ 1345 1326 int i,i2,WndNum; 1346 char str[MAX_PATH],temporary[1024],temp2[MAX_PATH], temp3[MAX_PATH],*pTemp;1327 char str[MAX_PATH],temporary[1024],temp2[MAX_PATH],*pTemp; 1347 1328 HWND hChild; 1348 1329 RECT rect; … … 1350 1331 HDROP hDrop; 1351 1332 HGLOBAL hGlobal; 1352 HANDLE hFile;1353 1333 1354 1334 static COLORREF colorUser=RGB(255,255,255); … … 1374 1354 1375 1355 #ifndef THETEXT 1376 case IDM_DEBUG:1377 if(pobj_Debugger->IsDebugging()){1378 pobj_Debugger->DebugContinue();1379 return 0;1380 }1381 1382 hChild=GetWindow(hClient,GW_CHILD);1383 if(ProjectInfo.name[0]){1384 //プロジェクトが開かれている場合1385 if(!SetProjectToRun()) return 0;1386 1387 //デバッグ用のコマンドライン及び実行可能ファイル(DLLのみ)1388 sprintf(temporary,"%s\r\n%s",ProjectInfo.szExePath,ProjectInfo.szCmdLine);1389 sprintf(temp2,"%spgm.tmp",pj_editor_Dir);1390 hFile=CreateFile(temp2,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_TEMPORARY,NULL);1391 DWORD dwAccessBytes;1392 WriteFile(hFile,temporary,lstrlen(temporary),&dwAccessBytes,NULL);1393 CloseHandle(hFile);1394 1395 //ソースファイル名をtemp2へ1396 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);1397 1398 //出力ファイル名をtemp3へ1399 lstrcpy(temp3,ProjectInfo.lpszOutput_Debug);1400 GetFullPath(temp3,ProjectInfo.dir);1401 1402 if(IsNeedCompileForProject(1))1403 sprintf(temporary,"\"%s\" \"%s\" /debug /run /wnd:%08x",temp2,temp3,hwnd);1404 else1405 sprintf(temporary,"\"%s\" \"%s\" /run /wnd:%08x",temp2,temp3,hwnd);1406 1407 //DLLオプション1408 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");1409 1410 //Unicodeオプション1411 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");1412 1413 //ブレークポイントをセーブ1414 ProjectInfo.pobj_DBBreakPoint->SaveToTempFile();1415 }1416 else{1417 //単独ソースコード1418 if(!SetRunning(hChild)) return 0;1419 if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,1))1420 sprintf(temporary,"\"%s\" /debug /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);1421 else1422 sprintf(temporary,"\"%s\" /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);1423 1424 //ブレークポイントをセーブ1425 pobj_DBBreakPoint->SaveToTempFile();1426 }1427 1428 //コンパイルビューをクリップするかどうか1429 if(bClipCompileView){1430 lstrcat(temporary," /clip_compile_view");1431 1432 //コンパイラビューを閉じる1433 if(hCompileView==(HWND)-1) return 0;1434 if(hCompileView){1435 hChild=hCompileView;1436 hCompileView=(HWND)-1;1437 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);1438 }1439 1440 //重複起動防止のため1441 hCompileView=(HWND)-1;1442 }1443 1444 //インクルードディレクトリ1445 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());1446 lstrcat(temporary,temp2);1447 1448 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );1449 1450 return 0;1451 case IDM_DEBUGCOMPILE:1452 hChild=GetWindow(hClient,GW_CHILD);1453 if(ProjectInfo.name[0]){1454 //プロジェクトが開かれている場合1455 if(!SetProjectToRun()) return 0;1456 1457 //ソースファイル名をtemp2へ1458 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);1459 1460 //出力ファイル名をtemp3へ1461 lstrcpy(temp3,ProjectInfo.lpszOutput_Debug);1462 GetFullPath(temp3,ProjectInfo.dir);1463 1464 sprintf(temporary,"\"%s\" \"%s\" /debug /wnd:%08x",temp2,temp3,hwnd);1465 1466 //DLLオプション1467 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");1468 1469 //Unicodeオプション1470 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");1471 }1472 else{1473 //単独ソースコード1474 if(!SetRunning(hChild)) return 0;1475 sprintf(temporary,"\"%s\" /debug /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);1476 }1477 1478 //コンパイルビューをクリップするかどうか1479 if(bClipCompileView){1480 lstrcat(temporary," /clip_compile_view");1481 1482 //コンパイラビューを閉じる1483 if(hCompileView==(HWND)-1) return 0;1484 if(hCompileView){1485 hChild=hCompileView;1486 hCompileView=(HWND)-1;1487 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);1488 }1489 1490 //重複起動防止のため1491 hCompileView=(HWND)-1;1492 }1493 1494 //インクルードディレクトリ1495 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());1496 lstrcat(temporary,temp2);1497 1498 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );1499 1500 return 0;1501 case IDM_ATTACH:1502 int idProcess;1503 DWORD dwPlatform;1504 idProcess=DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_ATTACH),hwnd,(DLGPROC)DlgAttach,(LPARAM)&dwPlatform);1505 if(idProcess==0) return 0;1506 1507 sprintf(temporary,"/attach:%08x /wnd:%08x",idProcess,hwnd);1508 1509 //コンパイルビューをクリップするかどうか1510 if(bClipCompileView){1511 lstrcat(temporary," /clip_compile_view");1512 1513 //コンパイラビューを閉じる1514 if(hCompileView==(HWND)-1) return 0;1515 if(hCompileView){1516 hChild=hCompileView;1517 hCompileView=(HWND)-1;1518 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);1519 }1520 1521 //重複起動防止のため1522 hCompileView=(HWND)-1;1523 }1524 1525 //インクルードディレクトリ1526 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());1527 lstrcat(temporary,temp2);1528 1529 ActiveBasic::Common::Platform::EnumType platform;1530 if(dwPlatform==IMAGE_FILE_MACHINE_I386)1531 {1532 platform = ActiveBasic::Common::Platform::X86;1533 }1534 else if(dwPlatform==IMAGE_FILE_MACHINE_AMD64)1535 {1536 platform = ActiveBasic::Common::Platform::X64;1537 }1538 else1539 {1540 throw;1541 }1542 1543 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( platform ), temporary );1544 1545 return 0;1546 case IDM_RELEASECOMPILE:1547 hChild=GetWindow(hClient,GW_CHILD);1548 if(ProjectInfo.name[0]){1549 //プロジェクトが開かれている場合1550 if(!SetProjectToRun()) return 0;1551 1552 //ソースファイル名をtemp2へ1553 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);1554 1555 //出力ファイル名をtemp3へ1556 lstrcpy(temp3,ProjectInfo.lpszOutput_Release);1557 GetFullPath(temp3,ProjectInfo.dir);1558 1559 sprintf(temporary,"\"%s\" \"%s\" /wnd:%08x",temp2,temp3,hwnd);1560 1561 //DLLオプション1562 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");1563 1564 //Unicodeオプション1565 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");1566 }1567 else{1568 //単独ソースコード1569 if(!SetRunning(hChild)) return 0;1570 sprintf(temporary,"\"%s\" /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);1571 }1572 1573 //コンパイルビューをクリップするかどうか1574 if(bClipCompileView){1575 lstrcat(temporary," /clip_compile_view");1576 1577 //コンパイラビューを閉じる1578 if(hCompileView==(HWND)-1) return 0;1579 if(hCompileView){1580 hChild=hCompileView;1581 hCompileView=(HWND)-1;1582 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);1583 }1584 1585 //重複起動防止のため1586 hCompileView=(HWND)-1;1587 }1588 1589 //インクルードディレクトリ1590 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());1591 lstrcat(temporary,temp2);1592 1593 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );1594 1595 return 0;1596 case IDM_RELEASERUN:1597 hChild=GetWindow(hClient,GW_CHILD);1598 if(ProjectInfo.name[0]){1599 /* //プロジェクトが開かれている場合1600 if(!SetProjectToRun()) return 0;1601 1602 //必要であればリリースコンパイル1603 if(IsNeedCompileForProject(0))1604 SendMessage(hwnd,WM_COMMAND,IDM_RELEASECOMPILE,0);*/1605 1606 if(ProjectInfo.dwModuleType==MT_DLL){1607 lstrcpy(temporary,ProjectInfo.szExePath);1608 }1609 else{1610 lstrcpy(temporary,ProjectInfo.lpszOutput_Debug);1611 GetFullPath(temporary,ProjectInfo.dir);1612 }1613 }1614 else{1615 /* //必要であればリリースコンパイル1616 if(!SetRunning(hChild)) return 0;1617 1618 if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,0))1619 SendMessage(hwnd,WM_COMMAND,IDM_RELEASECOMPILE,0);*/1620 1621 //単独ソースコード1622 _splitpath(MdiInfo[GetWndNum(hChild)].path,temporary,temp2,temp3,NULL);1623 lstrcat(temporary,temp2);1624 lstrcat(temporary,temp3);1625 lstrcat(temporary,".exe");1626 }1627 1628 //インクルードディレクトリ1629 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());1630 lstrcat(temporary,temp2);1631 1632 ShellExecute(hwnd,"open",temporary,NULL,NULL,SW_SHOWNORMAL);1633 return 0;1634 1356 1635 1357
Note:
See TracChangeset
for help on using the changeset viewer.