인해 정의되지 않은 vtable에 C에서 레이아웃 ++, 하지만 명시 적으로 호출 규칙을 설정하고 가상 함수 및 상속을 피하면 무슨 나쁜 생각입니까? 즉DLL 경계를 넘어서 vtable없이 C++ 구조체를 전달합니까? DLL 경계를 넘어
, 내가 안전하게 DLL에서 다음과 같은 구조체에 대한 포인터를 전달할 수 있을까?
struct MyStruct {
int a;
int b;
WINAPI MyStruct(int a, int b)
: a(a), b(b)
{}
void WINAPI SetA(int a) {
this->a = a;
}
};
등등 differetnt 컴파일러 버전과 같은 DLL에 링크를 사용하는 것이 안전 할 것인가?
vtables 및 상속과 함께 모든 관련 코드가 동일한 컴파일러 및 옵션으로 컴파일 된 경우 어떤 문제가 발생할 수 있는지 알 수 없습니다. – PlasmaHH
함수가 인라인 인 경우 오브젝트 레이아웃이 동일해야합니다 올바른 포장/정렬 (예 : # pragma 팩과 함께) 그러면 SetA 함수가 dll을 '호스팅'하는 앱으로 컴파일됩니다. 다른 옵션은 vtbl의 함수 포인터를 수동으로 생성하는 것입니다. – Pete