Получение странной ошибки при попытке преобразовать класс Unmanaged C ++ в класс Managed C ++ (для использования в .net) - PullRequest
1 голос
/ 25 июня 2010

Привет,

Прежде всего, я не разработчик C ++, поэтому, пожалуйста, прости мои недостатки ....

Я пытаюсь взять неуправляемый код C ++ другого разработчика и переработать его, чтобы он мог вызываться из управляемой DLL из нашего приложения на c # .net. Пожалуйста, имейте в виду, что я - разработчик .net, и я не касался C ++ уже 12 лет. И когда я это сделал ... я сделал игру ножницами из камня. (

В любом случае ... На форуме я нашел небольшую заметку от другого разработчика, в которой предлагалось добавить сборщик мусора к классу в файле .h с помощью "Public __gc". Ну, есть два класса, которые я пытаюсь преобразовать в управляемый код, поэтому я пошел дальше и сделал это ... и один из них просто мгновенно сработал! Другой ... ну, выдает эту ошибку:

'не может преобразовать параметр 5 из' char * __ gc * 'в' char ** '

Хорошо, я знаю, что это как-то связано с указателями, указывающими на большее количество указателей и прочего ... но вот переменные, о которых идет речь, DID работал, когда сборщик мусора не был добавлен к имени класса и теперь выиграл Построить с ним добавлено:

<<< ФАЙЛ ЖАТКИ >>>

публичный __gc класс Боб { ... общественности: char * img_buff; ... int init (void); }

<<< ФАЙЛ СРР >>>

int init (void) { ... nRet = is_AllocImageMem (hcam, img_wid, img_hgt, глубина, & img_buff,

Есть предложения или идеи? Я просто не знаю достаточно о "*" и & и указателях и прочем в C ++.

Заранее спасибо. С наилучшими пожеланиями !!!

1 Ответ

0 голосов
/ 25 июня 2010

Какая версия Visual Studio у вас есть? __gc - это Managed C ++, что было ужасно. Вы хотите C ++ / CLI, где волшебные слова public ref class. Тем не менее, независимо от того, каким образом вы это делаете, вам придется немного понимать указатели, потому что у вас будет код, который говорит: «Я беру собственный указатель», и вы намереваетесь передать ему управляемую ссылку что-то на куче собранного мусора. Вам придется изменить этот код, чтобы он работал.

Я почти уверен, что использование PInvoke будет лучшим вариантом для вас, потому что для этого не потребуется столько доработок кода C ++. Если у вас есть опыт работы с C ++ в команде, мой ответ будет другим.

...