2

これは私がこれまでに持っているものです...基本的に、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

どんな助けでも大歓迎です。ありがとう、ジェームズ。

4

1 に答える 1

0

C# がそれを取得するために 16 ビット文字を渡す必要はありませんか? (しゃれた意図)

于 2011-04-14T07:06:43.327 に答える