решение для определения типа для оболочки dll - PullRequest
0 голосов
/ 15 июля 2010

Я хочу написать обертку для DLL-файла, в данном случае для Python. Проблема в том, что типы аргументов не являются стандартными для языка Си. Они были typedef'end к чему-то еще.

У меня есть заголовочные файлы для DLL-файлов ... так что я могу вручную отследить исходный стандартный тип C, для которого был задан тип аргумента. Но хотел более систематический способ сделать это. Мне было интересно, есть ли утилита, которая будет оценивать заголовочные файлы, или вы можете найти где-нибудь в dll определение типов.

1 Ответ

0 голосов
/ 15 июля 2010

Я думаю, что инструмент, который вы ищете: SWIG :

SWIG - это инструмент разработки программного обеспечения, который соединяет программы, написанные на C и C ++, с различными высокоуровневымиязыки программирования.SWIG используется с различными типами языков, включая распространенные языки сценариев, такие как Perl, PHP, Python, Tcl и Ruby.Список поддерживаемых языков также включает языки, не относящиеся к сценариям, такие как C #, Common Lisp (CLISP, Allegro CL, CFFI, UFFI), Java, Lua, Modula-3, OCAML, Octave и R. Также несколько интерпретируемых и скомпилированных реализаций SchemeGuile, MzScheme, Chicken) поддерживаются.SWIG чаще всего используется для создания интерпретируемых или скомпилированных сред программирования высокого уровня, пользовательских интерфейсов, а также в качестве инструмента для тестирования и создания прототипов программного обеспечения C / C ++.SWIG также может экспортировать свое дерево разбора в форме XML-выражений и s-выражений Lisp.SWIG может свободно использоваться, распространяться и модифицироваться для коммерческого и некоммерческого использования.

Это предполагает, что вы готовы использовать заголовки для DLL.Если вы хотите работать исключительно с DLL, то у вас есть больше работы.Он может предоставить интерфейс отражения, который вы можете использовать для анализа типов.В противном случае вы попадаете в мир боли или перепроектируете любую отладочную информацию в DLL.

...