Как вернуть строку из собственного кода в управляемый код в Windows Azure? - PullRequest
2 голосов
/ 17 августа 2011

Мне очень помог этот учебник по взаимодействию кода C # и неуправляемого кода C ++ в Windows Azure http://msdn.microsoft.com/en-us/hh351534

Однако, когда я изменяю это, я сталкиваюсь с некоторыми непредвиденными ошибками.

Вместо того, чтобы возвращать и отображать int из неуправляемого кода, я хотел бы, чтобы он возвращал строку, отображающую эту строку в коде C #. Поэтому в моем эксперименте я изменил функцию AddNumbers() с

NATIVECALCULATOR_API int AddNumbers(int left, int right){
    return left+right;
}

в

NATIVECALCULATOR_API char *AddNumbers(int left, int right){
    return "a string";
}

чтобы при нажатии кнопки на странице ASP.NET она возвращала «строку».

Однако в файле code.hind веб-страницы default.aspx.cs говорится, что я не могу изменить

static extern int AddNumbers(int left, int right);

в

static extern char *AddNumbers(int left, int right);

потому что «указатели могут использоваться только в небезопасном контексте»

И оттуда я перепробовал много методов, но мне не удалось преобразовать AddNumbers() в строку для отображения.

Так что, в принципе, может кто-нибудь показать мне, как изменить учебник, чтобы отображать строку вместо int.

1 Ответ

1 голос
/ 18 августа 2011

То, что C # пытается вам сказать, это то, что он не позволит вам охотно использовать необработанные указатели.К счастью, мы все еще можем передавать строки (даже необработанные строки символов) из неуправляемого кода в управляемый код с помощью Data Marshalling.В случае строк система переводит char* в C ++ в string в C #.

Для вашего конкретного вопроса измените AddNumbers в default.aspx.cs с

static extern int AddNumbers(int left, int right);

на

static extern string AddNumbers(int left, int right);

Аналогично измените код C ++, чтобы он читался следующим образом:

NATIVECALCULATOR_API char* AddNumbers(int left, int right)
{
    return "a string";
}

Маршаллинг данных должен правильно передать строку от одного кдругое.

Вот статья MSDN , в которой более подробно объясняется сортировка данных (MUCH).

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