Как создать замену для существующей библиотеки? - PullRequest
0 голосов
/ 09 апреля 2010

Помимо создания dll со всеми одинаковыми функциями с одинаковым интерфейсом и соглашениями о вызовах, должна ли dll замены точно дублировать карту экспорта, включая порядковые номера оригинала? Чтобы работала не только явная загрузка через GetProcAddress, но и неявные ссылки?

(редактировать: это неуправляемый, c / c ++ windows dll, о котором я говорю, а не .net)

1 Ответ

1 голос
/ 09 апреля 2010

Вам нужно будет имитировать каждый экспорт, который использует любой другой клиент, вам не нужно имитировать «мертвый» экспорт, который никто не использует. Вы должны сохранить порядковые номера, только если другие клиенты связаны, используя порядковый номер вместо имени экспорта (что довольно редко).

Есть кое-что, что вы должны иметь в виду: если dll содержит классы C ++ и не использует extern"C", то вам нужно поддерживать двоичную сопоставимость, то есть классы в замене DLL должен иметь те же поля в том же порядке, что и исходные классы. Если вы используете интерфейсы, вам нужно сохранить vtable с одинаковыми аргументами для каждого метода.

...