массив строк C # Совместимость с C ++ dll; массив строк из C # в C ++ dll, который устанавливает данные и отправляет их обратно в c # - PullRequest
2 голосов
/ 14 апреля 2011

это то, что я имею до сих пор ... в основном я использую c ++ dll, чтобы заполнить установленные им компоненты дерева, а затем вернуть их в управляемый код csharp. Я сталкиваюсь с проблемами и пробовал весь день безуспешно. Все, что я хочу сделать, это отправить структуру со строковым массивом из c # в c ++ dll, где он устанавливает все компоненты дерева и затем отправляет ее обратно в c #. вот что я получил ... единственное, что должно остаться в коде c ++, это данные, установленные из массива TCHAR.

c ++ необработанный код:

 struct GetTreeStruct
 {    
     char** components;
 };

extern "C" __declspec(dllexport) void __stdcall GetTree(GetTreeStruct* myStruct);

void __stdcall GetTree(GetTreeStruct* myStruct)
{

    myStruct->components = new char *[sNumberReturned]; //sNumberReturned = some # 

    for(i = 0;i<sNumberReturned;i++)
    {
       myStruct->components[i] = (char*)(arrayItem[i]); //arrayItem is TCHAR array
    }

}

c # управляемый код:

public struct GetTreeStruct
{
    [MarshalAs(UnmanagedType.LPArray)]
    public string[] treeComponents;
}

[DllImport(@"C:\Users\James\Desktop\ShaggyDLL\Release\ShaggyDLL.dll")]
public static extern void GetTree(ref GetTreeStruct theStruct);

в моей главной ..

//getTree
getTreeStruct.treeComponents = null;

Console.WriteLine("Get Tree:");
NativeMethods.GetTree(ref getTreeStruct);

list<string> list = getTreeStruct.treeComponents.ToList();

//print list
//... you know the code

любая помощь будет очень признательна. Спасибо, Джеймс.

1 Ответ

0 голосов
/ 14 апреля 2011

Разве вам не нужно передавать 16-битные символы для C #, чтобы получить его? (каламбур)

...