Ужасный заголовок Я знаю и ужасный вопрос. Я работаю с небольшим количеством программного обеспечения, где dll возвращает ptr во внутренний класс. Другие библиотеки (вызов DLL), а затем использовать этот указатель для вызова методов этого класса непосредственно:C++ Изменение класса в dll, где указатель на этот класс возвращается в другие dll
//dll 1
internalclass m_class;
internalclass* getInternalObject() {
return &m_class;
}
//dll 2
internalclass* classptr = getInternalObject();
classptr->method();
Это пахнет очень плохо для меня, но это то, что у меня есть ... Я хочу, чтобы добавить новый метод internalclass поскольку одна из вызывающих библиотек требует дополнительных функций. Я уверен, что все DLL, которые обращаются к этому классу, нужно будет перестроить после включения нового метода, но я не могу разобраться в логике причины.
Я думаю, что это как-то связано с уже скомпилированной вызывающей DLL, имеющей физический адрес каждой функции внутри внутреннего класса в другой DLL, но я на самом деле не понимаю этого; кто-нибудь здесь может предоставить краткое объяснение того, как dll (новая внутренняя библиотека dll, перестроенная вызывающая DLL и вызывающая dll, построенная с предыдущей версией dll внутреннего класса) будут соответствовать друг другу?
Спасибо, Патрик
Итак, если метод не виртуальный, это будет нормально (даже если другие методы в классе (деструктор) являются виртуальными?) – Patrick
Пока вы связываете по имени, а не по порядку – xtofl
Я предполагаю, что порядок функций в таблице vtable Решили по порядку они находятся в определении класса? – Patrick