2012-09-24 63 views
4

我嘗試到c,通過以下結構++ DLL到C#:傳遞的char * []從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導入姓氏和名字。

我應該怎麼做導入char指針數組形式的c + +?

+0

關於C#marshing什麼? –

+0

你有沒有試過公共字符串[] myArray; – Adil

+0

是啊,試過了... ,但在以下行中輸入錯誤 IntPtr c = myname.myArray; –

回答

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

+0

完美答案:) –