2011-04-14 5 views
2

이것은 제가 지금까지 가지고있는 것입니다 ... 기본적으로 C++ dll을 사용하여 트리 구성 요소를 채우고 관리되는 csharp로 반환합니다 암호. 나는 문제를 겪고 있으며 하루 종일 아무런 노력없이 노력했다. 내가 성취하고자하는 것은 문자열 배열을 가진 구조체를 C#에서 C++ dll로 전송하여 트리의 모든 구성 요소를 설정 한 다음 C#으로 다시 보냅니다. 여기에 내가 가지고있는 것입니다. 유일한 것은 C++ 코드에 머물러 있어야합니다. 데이터는 TCHAR 배열에서 설정됩니다.문자열 배열 C# dll에 대한 상호 운용성; 문자열 배열을 C#에서 C++로 변환하여 데이터를 설정하고 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# 코드 관리 : C++ unmanged 코드

내 주에

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 

도움은 전혀 대단히 감사하겠습니다 . 고마워, 제임스.

답변

0

C#에 16 비트 문자를 전달해야 할 필요가 없습니까? (말장난 의도)