2

这就是我到目前为止所拥有的......基本上我使用c++ dll来填充树组件并设置它们,然后将它们返回到托管的csharp代码。我遇到了问题,尝试了一整天都没有成功。我想要完成的只是将带有字符串数组的结构从 c# 发送到 c++ dll,在其中设置树的所有组件,然后将其发送回 c#。这就是我得到的.. 唯一需要保留的是 c++ 代码中的数据是从 TCHAR 数组中设置的。

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

任何帮助都将不胜感激。谢谢,詹姆斯。

4

1 回答 1

0

您不需要为 C# 传递 16 位字符来获取它吗?(双关语)

于 2011-04-14T07:06:43.327 回答