2011-04-14 74 views
2

這是我迄今爲止...基本上我使用C++ dll來填充樹組件設置它們,然後將它們返回到託管csharp碼。我遇到了問題,並嘗試了一整天都沒有成功。我想完成的所有事情是發送一個從c#到C++ dll的字符串數組的結構,它設置樹的所有組件,然後將它發送回c#。這裏是我得到的..唯一需要留在C++代碼中的是數據是從TCHAR數組中設置的。字符串數組C#與C++ dll的互操作性;從C#到C++ dll的字符串數組設置數據並將其發送回c#

C++ unmanged代碼:

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 

任何幫助都將是非常讚賞。謝謝,詹姆斯。

回答

0

你不需要爲C#傳遞16位字符來得到它嗎? (雙關打算)