2010-03-10 2 views
2

Моя компания использует стороннюю C++ DLL, которая периодически обновляется. Я вручную создавал операторы C# DLLImport, но в этом последнем обновлении количество функций почти удвоилось. Есть ли какой-нибудь инструмент (желательно бесплатный), который создаст C# DLLImport из неуправляемого файла C++ .dll или .lib? (DLL экспортирует оформленные C++-функции, а не C++-класс).Инструмент для импорта C++ DLL

ответ

2

от Microsoft Managed, Native, и COM Interop Team предоставляет некоторые инструменты на Codeplex, среди них инструмент под названием

P/Invoke Interop Assistant

Я не пробовал сам, но это выглядит как будто он может делать то, что вы ищете.

+0

Не для чего нужно: «Чтобы использовать инструмент, вы либо загружаете сборки MSIL, либо получаете исходный код C для правильных неуправляемых подписей или фида в источнике C с неуправляемой подписью и выбираете правильный VB/C#». – user206645

+0

@ steve-weeks: Насколько я знаю, вам понадобятся источники C/C++, потому что родные DLL не хранят подпись экспортируемых функций (см. Http://stackoverflow.com/questions/386133/get-signatures- of-exported-functions-in-dll/386488 # 386488), и даже файл lib будет хранить подпись в определенном компиляторе. –

+0

+1 divo @ Steve-weeks Предположительно, вы использовали заголовки C++ от третьего лица для создания операторов DLLImport? Просто поместите эти заголовки в помощник PInvoke, и он будет генерировать C# – MarkJ

-1

Я бы написал обертку C++/CLI.

+0

. Это не так. Я знаю, что могу писать код, я хочу этого избежать. – user206645

0

Насколько я знаю, такого инструмента не существует. Вы должны написать декларацию P/Invoke для каждой функции самостоятельно. Я думаю, что это так же хорошо, так как функции C++ обычно полны тонкостей, включая контекст/out, строки c-style, c-style массивы, указатели, ссылки, а что нет. Многократно ожидаемый ввод/вывод может быть выражен только документацией, и инструмент не может выводить правильные объявления маршаллинга для функций.

+0

Некоторая правда в этом, но все же такой инструмент, как P/Invoke Interop Assistant, может автоматически выполнять 90% преобразования, экономя ваши часы утомительной ошибки, подверженной тяжелой работе. – MarkJ

Смежные вопросы