2012-08-28 2 views
2

나는 최근에 누가 CopyFileCopyFileEx이 C++ Metro 응용 프로그램에서 허용되지 않는다고 (정확한) 보이는 친구와 이야기하고있었습니다. 왜 이런거야? 그리고 왜 그들은 왜 이상한 대체품을 넣었습니까? CopyFile2왜 CopyFile2가 CopyFile 및 CopyFileEx를 대체합니까?

모두 파일을 복사 했으므로 이제는 확립 된 API의 일부를 금지하여 새로운 기능을 추가해야합니까?

답변

5
  1. 지하철 API를 사용하여 촬영 한 일반적인 자세는 "거기에 전 기능 또는 뭔가를 대체하는 경우, 당신은 새로운 하나를 호출해야합니다."했다 함수의 8 비트 문자열 (역사적인 이유로 "ANSI 인코딩"이라고 잘못 명명 됨) 버전에도 동일하게 적용됩니다. 다른 장점들 중 Windows RT의 경우 코드 크기가 작아집니다.

  2. CopyFile2에서 분석 해보자. 하나는 옵션 매개 변수가 첫 번째 구성원으로 크기가있는 구조입니다. 나는이 방법이 CopyFileEx에 의해 취해진 접근법보다 미래의 확장성에 더 좋다고 주장 할 것이다. 이를 통해 Microsoft는 구형 발신자와의 이진 호환성을 유지하면서 새로운 옵션을 추가 할 수 있습니다. (Microsoft는 구조의 길이를 확장 한 다음 dwSize을 확인하여 구조의 버전을 확인하고 적절하게 동작을 조정할 수 있습니다.)이 기능만으로도 CopyFileEx보다 더 많은 미래의 증거가 만들어 지므로 기능 서명 변경이 필요합니다 (따라서 전체적으로 새로운 기능)을 사용하여 단일 옵션을 추가하십시오. 전직 기능이 있다면, 그들이 다시 갈 수 있으면 좋겠다

+0

"의 넓은 규칙이있다 (나는 ... 아마 그들은 이미뿐만 아니라 CopyFile2에 옵션을 추가 않았다주의 깊게 읽고하지 않은 경우) 시간과 그것을 시작하는 그 길을 가라. ", 자주 덧붙여"모양으로, 우리는 매우 유감 스럽다. Ex 버전에서 더 나아 보인다. " 대부분, 그것은 단지 사후의 이익을위한 것입니다. 우리는 모두 우리가 폭발 할 수있는 코드를 가지고 있으며, 우리가 그 기회를 얻는다면 것들은 더 깨끗해진다 (대부분의 경우). –

+0

@ 존 한나 - 사실, 나는 개인적으로'Ex' 함수 중 일부가 실제로는 단순하고 우아한 인터페이스를 왜곡하는 쓸데없는 크래프트라고 생각합니다. (유닉스 세계에서 시스템 콜의 서명을 변경하는 것이 얼마나 드문 지 알 수 있습니다. 더 좋든 나쁘 던지 말할 수 있습니다.) 그렇다면이 문제에 대한 생각을 설명하려고합니다. – asveikau

+0

그것은 동전 하나의 다른면으로, 단 하나의 기능을 가짐으로써 뭉치를 없애 버릴 수 있습니다 (고려할 때, 다른 사람보다 필요성을보기가 어려운 일부 Ex 형태가 있음). –