Возвращение массива строк из dll - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Помогите, пожалуйста, со следующей проблемой. Имеется проект на C# и dll на С++. Я пытаюсь вернуть из функции, выполняющейся в dll на С++, массив строк, для чего сначала создаю массив StringBuilder'ов в коде на C#, передаю его в dll, заполняю значениями, а потом возвращаю обратно в код на C#. Но строчки остаются пустыми. Что интересно, если всё то же самое сделать не с массивом StringBuilder'ов, а с одним StringBuilder'ом, то код работает. Код на C#:
Листинг программы
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. StringBuilder str = new StringBuilder(10);
  6. try
  7. {
  8. SomeString(str, str.Capacity);
  9. Console.WriteLine(str);
  10. }
  11. catch (Exception exc)
  12. {
  13. Console.WriteLine(exc);
  14. }
  15. try
  16. {
  17. StringBuilder[] arrStr=new StringBuilder[5];
  18. for (int i=0; i<arrStr.Length; i++)
  19. {
  20. arrStr[i]=new StringBuilder(10);
  21. }
  22. SomeStringArray(arrStr, arrStr.Length, arrStr[0].Capacity);
  23. foreach (StringBuilder strB in arrStr)
  24. Console.WriteLine(strB);
  25. }
  26. catch (Exception exc)
  27. {
  28. Console.WriteLine(exc);
  29. }
  30. }
  31. [DllImport("ConsoleApplication1.dll")]
  32. private extern static void SomeString(StringBuilder str, int length);
  33. [DllImport("ConsoleApplication1.dll")]
  34. private extern static void SomeStringArray(StringBuilder[] str, int dimentionLenth0, int dimentionLenth1);
  35. }
Код dll на С++:
Листинг программы
  1. #include <string.h>
  2. #include <string>
  3. #include <vector>
  4. using namespace std;
  5. //extern "C" __declspec(dllexport) void SomeString (char str[], int length)
  6. extern "C" __declspec(dllexport) void SomeString (char* str, int length)//оба варианта объявления функции работают
  7. {
  8. /*for (int i=0; i<length; i++)
  9. {
  10. str[i]='й';
  11. }*/
  12. /*str[0]='й';
  13. str[1]='ц';
  14. str[2]='у';
  15. str[3]='к';
  16. str[4]='е';
  17. str[5]='н';
  18. str[6]='\0';*/
  19. strcpy(str, "фывапролджэ");//все способы обращения к строке работают
  20. }
  21. extern "C" __declspec(dllexport) void SomeStringArray (char** str, int dimentionLenth0, int dimentionLenth1)
  22. {
  23. //ни один из способов обращения к массиву строк не работает
  24. /*for (int i=0; i<length; i++)
  25. {
  26. str[i]='й';
  27. }*/
  28. /*str[0]='й';
  29. str[1]='ц';
  30. str[2]='у';
  31. str[3]='к';
  32. str[4]='е';
  33. str[5]='н';
  34. str[6]='\0';*/
  35. //strcpy(str, "фывапролджэ");
  36. for (int i=0; i<dimentionLenth0; i++)
  37. {
  38. for (int j=0; j<dimentionLenth1; j++)
  39. {
  40. str[i][j]='q';
  41. }
  42. }
  43. }
Заранее благодарен всем откликнувшимся.

Решение задачи: «Возвращение массива строк из dll»

textual
Листинг программы
  1. marshaledArray[i][j] = L'ё';

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы