4

次の構造を c++ DLL から c# に渡そうとしています。

struct name 
{   char* myArray[3];
    char firstname[100]; 
    char lastname[100]; 
}; 

void Caller(struct name * demo) 
{
  strcpy(demo->firstname,"hello");
  demo->myArray[0]="hello";
  demo->myArray[1]="hello";
  demo->myArray[2]="hello";
  ping(demo);                     //call to c# function
}

以下は私のC#コードです:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct name
{
   [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
   public string firstname;
   [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
   public string lastname;

   //what should i marshal here for  char* myArray[3];
} ;

static void Main(string[] args)
{
   name myname = new name();
   ping( ref myname);
}

public static void ping(int a,ref name myname)
{
   Console.WriteLine(myname.firstname+"\n");
}

C++ dll から姓名をインポートできます。

c++ から char ポインタ配列をインポートするにはどうすればよいですか?

4

1 に答える 1

0
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct Name
{
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
    public string FirstName;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
    public string LastName;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
    public string[] Array;
};

私の完全なソリューションについては、Foo.cpp と Program.cs を確認してください: https://gist.github.com/3779066

于 2012-09-24T23:24:44.040 に答える