Возвращение массива строк из 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'ё';