이상한 일이 발생했습니다. 나는 완벽하게 작동하도록되어있는 라이브러리 (오픈 소스 Netgen mesher의 nglib)를 사용하고 있습니다. ,Visual Studio에서 void로 보인 포인터 **
DLL_HEADER Ng_Mesh * Ng_NewMesh()
{
Mesh * mesh = new Mesh;
mesh->AddFaceDescriptor (FaceDescriptor (1, 1, 0, 1));
return (Ng_Mesh*) (void*) mesh;
}
나는 지역 주민에 갈 때 : 나는 연결하고 모든 것을 포함하지만 나는이 라이브러리를 사용할 수 있습니다 : Ng_Mesh* mesh = Ng_NewMesh();
Ng_NewMesh
() 메소드는 내가 사용하려는 목적이다을 인 *mesh
을 참조하면 void**
으로 표시됩니다. 나는이 개체에 포인트 및 기타 물건을 추가 할 수 있기 때문에하지 NULL
이지만, 일부 기능, 나는 예외가 얻을 :
System.AccessViolationException
: 보호 된 메모리를 읽거나 쓰려고 시도합니다. 이것은 종종 다른 메모리가 손상되었다는 표시입니다.ForwardModelingPlugin.CustomMeshVol3D.tesselate(CustomMeshVol3D*)
nglib.Ng_GetPoint
에서 nglib.Ng_GetPoint(Void** , Int32 , Double*)
에서
이 예외를 설명 인수 (Ng_Mesh*, Int32, Double*)
로 가질 예정이다.
왜이 캐스팅이 발생하는지 알 수 없습니다.
과 동일? 즉. 특정 멤버 함수를 호출하기 전에 다른 객체의 인스턴스로 설정해야하는 객체의 필드가 하나있을 수 있습니까? – stakx
'return (Ng_Mesh *) (void *) mesh;'- 불쾌한 캐스트가 필요합니까? 'void * '에 캐스트하는 것은 컴파일러가'Mesh *'를'Ng_Mesh * '에 직접 캐스팅했다면 불평 할 것이기 때문에 필요합니다. 그렇다면 정당한 사유로 불만을 제기합니까? 'Ng_Mesh *'에 대한 캐스트가 유효합니까? 아니면 어떻게 든 캐스트없이 그냥'Mesh * '를 반환 할 수 있습니까? – stakx
이것을 확인 하겠지만 확실하지는 않습니다. 다운로드 한 패키지에 포함 된 몇 가지 예를 사용하고 있습니다. – ccote