Как работает Линкер в случае переопределения метода в DLL с использованием SDK? - PullRequest
0 голосов
/ 25 марта 2019

Возьмем, к примеру, этот метод onChange (который переопределяет виртуальный метод):

struct SVGKnob : Knob, FramebufferWidget {
    TransformWidget *tw;
    SVGWidget *sw;
    CircularShadow *shadow;
    /** Angles in radians */
    float minAngle, maxAngle;

    SVGKnob();
    void setSVG(std::shared_ptr<SVG> svg);
    void step() override;
    void onChange(EventChange &e) override;
};

Он определен в приложении здесь , как:

void SVGKnob::onChange(EventChange &e) {
    dirty = true;
    Knob::onChange(e);
}

Это приложение построено и работает само по себе.

Если сейчас я работаю, используя SDK, предоставленный для этого приложения (который включает заголовочный файл с тем же объявлением класса SVGKnob)), и я создаю DLL, которая будет загружена в приложение, и я замечаю следующее:

  1. , если я ничего не буду делать, будет ясно, что onChange уже определено в основном приложении.
  2. если я переопределю в DLL свой собственный метод SVGKnob::onChange, он будет использоваться вместо описанного выше.

Пример:

void SVGKnob::onChange(EventChange &e) {
    // some stupid code
}

Как этовозможный?Проверяется ли DLL во время выполнения, если метод переопределен и используется один DLL вместо уже существующего в приложении?

В одном и том же приложении, очевидно, я могу переопределить дважды один и тот же метод.

Я могу сделать это с помощью DLL?

...