Возвращение массива строк из 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'ё';
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д