2009-12-04 2 views
2

В последнее время я много взаимодействовал с неуправляемыми библиотеками, и я продолжаю возвращаться к SO, чтобы задавать вопросы о некоторых сигнатурах методов, потому что я не программист на C/C++ (хотя мне это не совсем чуждо). Существуют ситуации, когда один и тот же аргумент в двух разных методах требует двух разных сигнатур P/Invoke (например: иногда я могу использовать ключевое слово out, иногда мне нужно использовать OutAttribute и т. Д.). Я не вижу в этом никаких причин.Где я могу узнать больше о P/Invoke?

Есть ли хорошие ресурсы для понимания P/Invoke и marshaling лучше для тех, кто не является экспертом по C/C++?

ответ

3

Проблема заключается в том, что C/C++ языки не дают вам возможность увидеть, производит ли функция или потребляет данные и является ли указатель аргумент указывает на единственное значение или массив значений. Изучение языков или изучение P/Invoke на самом деле не помогают в этом, хотя это дает вам лучший шанс угадать его правильно.

Решить это можно только, узнав больше о конкретном нативном коде, для которого вы пишете декларацию P/Invoke. Для этого требуется исходный код и некоторое знакомство с языком. Или хорошие рабочие отношения с оригинальным автором или владельцем кода.

Adam Nathan's book - стандартная ссылка.

+0

Для моего текущего проекта у меня есть очень подробная документация для неуправляемой стороны. Но есть случаи, например, когда метод, похоже, принимает указатель на одну структуру, но в документации указано, что он заполняет массив, заданный этим аргументом. Я понятия не имею, как написать эквивалентную подпись C# для такого рода вещей. –

+0

Ну, если это массив, объявите аргумент как массив []. Несомненно, Натан может помочь вам в этом. –

3
+2

Мне нравится pinvoke.net, но я не знаю, пошлю ли я кого-нибудь там, чтобы узнать о pinvoke. Тем не менее, похоже, есть достойный раздел «Рекомендуемое чтение». –

+0

Подписи для этой неуправляемой библиотеки не находятся на PInvoke.net. Тем не менее, я использую это все время при работе с библиотеками Windows. Я также рассмотрю раздел «Рекомендуемое чтение». Благодарю. –