Возвращение массива строк из dll - C#
Формулировка задачи:
Здравствуйте!
Помогите, пожалуйста, со следующей проблемой. Имеется проект на C# и dll на С++. Я пытаюсь вернуть из функции, выполняющейся в dll на С++, массив строк, для чего сначала создаю массив StringBuilder'ов в коде на C#, передаю его в dll, заполняю значениями, а потом возвращаю обратно в код на C#. Но строчки остаются пустыми. Что интересно, если всё то же самое сделать не с массивом StringBuilder'ов, а с одним StringBuilder'ом, то код работает.
Код на C#:
Код dll на С++:
Заранее благодарен всем откликнувшимся.
Листинг программы
- class Program
- {
- static void Main(string[] args)
- {
- StringBuilder str = new StringBuilder(10);
- try
- {
- SomeString(str, str.Capacity);
- Console.WriteLine(str);
- }
- catch (Exception exc)
- {
- Console.WriteLine(exc);
- }
- try
- {
- StringBuilder[] arrStr=new StringBuilder[5];
- for (int i=0; i<arrStr.Length; i++)
- {
- arrStr[i]=new StringBuilder(10);
- }
- SomeStringArray(arrStr, arrStr.Length, arrStr[0].Capacity);
- foreach (StringBuilder strB in arrStr)
- Console.WriteLine(strB);
- }
- catch (Exception exc)
- {
- Console.WriteLine(exc);
- }
- }
- [DllImport("ConsoleApplication1.dll")]
- private extern static void SomeString(StringBuilder str, int length);
- [DllImport("ConsoleApplication1.dll")]
- private extern static void SomeStringArray(StringBuilder[] str, int dimentionLenth0, int dimentionLenth1);
- }
Листинг программы
- #include <string.h>
- #include <string>
- #include <vector>
- using namespace std;
- //extern "C" __declspec(dllexport) void SomeString (char str[], int length)
- extern "C" __declspec(dllexport) void SomeString (char* str, int length)//оба варианта объявления функции работают
- {
- /*for (int i=0; i<length; i++)
- {
- str[i]='й';
- }*/
- /*str[0]='й';
- str[1]='ц';
- str[2]='у';
- str[3]='к';
- str[4]='е';
- str[5]='н';
- str[6]='\0';*/
- strcpy(str, "фывапролджэ");//все способы обращения к строке работают
- }
- extern "C" __declspec(dllexport) void SomeStringArray (char** str, int dimentionLenth0, int dimentionLenth1)
- {
- //ни один из способов обращения к массиву строк не работает
- /*for (int i=0; i<length; i++)
- {
- str[i]='й';
- }*/
- /*str[0]='й';
- str[1]='ц';
- str[2]='у';
- str[3]='к';
- str[4]='е';
- str[5]='н';
- str[6]='\0';*/
- //strcpy(str, "фывапролджэ");
- for (int i=0; i<dimentionLenth0; i++)
- {
- for (int j=0; j<dimentionLenth1; j++)
- {
- str[i][j]='q';
- }
- }
- }
Решение задачи: «Возвращение массива строк из dll»
textual
Листинг программы
- marshaledArray[i][j] = L'ё';
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д