문제

나는 읽었습니다(Nish Sivakumar의 책에서) C++/CLI 실행 무엇보다도) 비관리 코드에서 메서드가 호출되지 않을 것임을 알고 있는 경우 이중 썽킹을 방지하려면 함수 호출에 __clrcall 데코레이터를 사용해야 합니다.Nish는 또한 메서드 서명에 CLR 유형이 포함되어 있으면 JIT 컴파일러가 자동으로 __clrcall을 추가한다고 말합니다.나에게 명확하지 않은 점은 C++/CLI 속성을 생성할 때 __clrcall을 포함해야 하는지 여부입니다.어떤 의미에서 속성은 .NET 언어에서만 액세스할 수 있는 반면, C++/CLI 컴파일러는 (제 생각에는) 메서드만 생성합니다(예:***_get() )은 관리 코드와 비관리 코드 모두에서 호출할 수 있습니다.그렇다면 내 속성에 __clrcall 수정자를 사용해야 하나요? 그렇다면 어디로 가나요?get/set 함수 자체에?

도움이 되었습니까?

해결책

@Mike B - ildasm에 대한 팁을 주셔서 감사합니다. 저는 그 도구에 대해 몰랐습니다.

내가 Nish를 잘못 읽거나 오해한 것 같습니다. __clrcall 수정자와 이를 통해 제거되는 이중 썽킹 문제는 NATIVE 클래스의 메서드에만 적용됩니다.관리되는 클래스의 모든 메서드는 기본적으로 __clrcall입니다. 이는 돌이켜보면 분명해 보입니다.

분명히 마커스 히지(Marcus Heege)의 책 전문가 C++/CLI 사용할 수 있습니다 무료 다운로드로, 호출 규칙을 요약한 멋진 표가 215페이지에 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top