Проблема переноса кода C ++ / CLI - PullRequest
1 голос
/ 03 октября 2010


Я пытаюсь перенести приложение C++.NET (управляемые расширения) на C++/CLI. Однако я пока не очень силен в синтаксисе.

Я пытаюсь создать оболочку для файла C Dll.

Для этого я использую DllImport, но мне не удалось найти документацию по его использованию. Есть некоторые проблемы из-за изменений в синтаксисе, но я пока не могу понять, почему.

Строка C++.NET выглядит следующим образом:

[DllImport("my.dll", CharSet = Ansi,  CallingConvention = Cdecl, EntryPoint = "#10")]
 static MY_STATUS CPPInit(MY_HANDLE *pLmxHandle);

Идея состоит в том, чтобы передать ссылку MY_HANDLE на функцию, которая ее инициализирует. Одна из проблем заключается в том, что ключевые слова Ansi и Cdecl неизвестны. Я ожидаю, что мне нужно поставить какой-то класс перед ними, но это немного сложно без документов или образцов.

Другая вещь, которую я имею, это функция, которая возвращает статическую строку:

char *MyFunc();

Можно ли предположить, что он может быть сопоставлен с String^?

Заранее спасибо.

1 Ответ

0 голосов
/ 04 октября 2010

спасибо за комментарий.

Я подумал, что мне нужно создать смешанную библиотеку, чтобы избежать p / invoke. Хотя это займет некоторое время.

На самом деле я решил ошибку компиляции по-другому. Хотя я еще не тестировал его, потому что столкнулся с некоторыми 32/64 битными проблемами, которые не могу решить из-за других ошибок в бета-версии Whidbey.

Моим решением было написать прототип следующим образом:

interior_ptr<MY_HANDLE> pMyHandle;

Из того, что я понял, это должно дать функции ссылку (отсюда и адрес) на функцию dll. Как только я попробую, я посмотрю, сработает ли моя идея.
В противном случае я пойду на следующую опцию (которую мне предложили):

[Out] IntPtr p_MyHandle

В любом случае, я думаю, что проблема решена, потому что один из них должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...