C ++ взаимодействия CLI против PInvoke? - PullRequest
1 голос
/ 27 декабря 2011

Я полагаю, что многие люди уже задавали этот вопрос раньше, но я все больше и больше путался.Я ищу ответ с точки зрения непрофессионала.У меня есть библиотека C ++ для выполнения одного действия.Мне нужно вызывать функции из этой библиотеки из моей программы на C #.Какой лучший способ сделать это и почему?будь то вывод из приложения C # или запись оболочки в C ++ / CLI.

В библиотеке C ++ есть только 1 функция (ReadNextRecord), которая будет вызываться из программы C #.Программа на C # должна сначала создать объект класса, определенного в библиотеке C ++, а затем вызвать функцию для получения следующей записи из источника данных.Функция вызывается много раз (> 50000 раз), поэтому проблема заключается в эффективности.

В большинстве документов я вижу, как обернуть функцию для вызова из кода C #.Я не вижу более сложного примера, когда объект C ++ создается в пространстве C #, а затем вызывается функция func для объекта.

Пожалуйста, совет.

С уважением, Alok

1 Ответ

3 голосов
/ 27 декабря 2011

При работе с кодом C ++ проще использовать C ++ / CLI (по крайней мере, если вы работаете с исходным кодом для библиотеки C ++ или хотя бы знаете, что он скомпилирован с MSVC, C ++ не совместим с ABI во всех компиляторы в общем). PInvoke в основном полезен для функций C, но его можно заставить работать с некоторыми функциями C ++ (см. этот вопрос ).

...