VisualWorks 내에서 EnumServicesStatus (으)로 전화를 걸려고합니다. 첫 번째 호출의 경우 반환 된 정보가 필요한 바이트 수 (pcbBytesNeeded)를 알기 위해 필요한 값으로 매개 변수를 설정합니다.스몰 토크에서 C 호출
이제 인스턴스 수를 예상하는 malloc :을 사용하여 lpServices 버퍼에 메모리를 할당해야합니다. 어떻게 이것을 쉽게 계산할 수 있습니까? pcbBytesNeeded를 LPENUM_SERVICE_STATUS 구조체의 크기로 나누면 메모리를 확보 할 때 코드가 다운됩니다.
/편집
메모리를 확보 할 때 크래시가 해결되었습니다. (나는 실수로 포인터를 잡고있는 변수를 조작했다.) 그러나 Karsten에 대한 제 질문은 여전히 유효합니다. ENUM_SERVICE_STATUS 크기로 인해 pcbBytesNeeded가 분할되지 않는 이유는 무엇입니까? LPTSTR lpServiceName 및 LPTSTR lpDisplayName 멤버 때문입니까?
지금 내가하고있는 일로 해방 될 때 충돌이 발생합니다. numItems : = 22728/36 그게 631.333333333과 같아서 내가 잘못 생각한 것 같아요. – Cantillon
이 문서에서는 인수가 인수로 전달 된 포인터에 서비스 수가 반환되었다고합니다. 그런 다음 pcbBytesNeeded는 버퍼가 너무 작기 때문에 나머지 요소에 필요한 메모리 양을 보유합니다. 이 함수는 메모리 양을 계산하고 요소 수에 응답하기 때문에 필요한 메모리 크기를 기반으로 요소 수를 계산할 수 없다는 것은 매우 당연한 일입니다. – Karsten