ADN Open CIS
Сообщество программистов Autodesk в СНГ

11/02/2014

Внутренние имена функций в утилите DependencyWalker

Утилита Dependency Walker, доступная www.dependencywalker.com, является “бесплатной утилитой, которая (…) выводит список всех функций, которые экспортируются модулем, и которые могут вызываться другими модулями”.

Для нас это представляет интерес для программирования AutoCAD так как некоторые API недоступны и/или недокументированы, но экспортируются из кода на C++. В этом случае в .NET для вызова этого кода нужно воспользоваться атрибутом DllImport.

В предыдущей теме мы объясняли как использовать DllImport для вызова наших собственных C++ методов, но в данном случае имена функций при компиляции изменяются. Измененное имя называется внутренним (декорированным) именем. Огда такое происходит Dependency Walker показывает внутреннее имя, необходимое для параметра EntryPoint атрибута.

Важное замечание: внутренние имена могут изменяться между основными версиями AutoCAD, например, между 2012 (R18) и 2013 (R19), и между платформами (т.е. 32 или 64 бита). В этом случае обычно требуется создание более чем одного DllImport, по одному для каждого из вариантов.

Чтобы получить внутренне имя, запустите утилиту, откройте DLL или EXE, найдите метод, нажмите правую кнопку мыши, снимите флажок ‘Undecorate C++ Function’, как показано ниже.

Затем снова нажмите правую кнопку мыши и выберите ‘Copy Function Name’, как показано ниже. Теперь в буфере обмена строка, которую можно использовать в параметре EntryPoint.

 

 

Источник: http://adndevblog.typepad.com/autocad/2012/07/decorated-names-with-dependency-walker-tool.html

 

Обсуждение: http://adn-cis.org/forum/index.php?topic=518

Опубликовано 11.02.2014
Отредактировано 11.02.2014 в 16:15:28