我有一個C#.NET 2.0 CF項目,我需要在本地C++ DLL中調用一個方法。這種本地方法返回一個TableEntry
類型的數組。在調用本地方法時,我不知道數組的大小。從本機dll到c#應用程序獲取一個數組結構
如何從原生DLL獲取表格到C#項目?下面是我現在有效的。
// in C# .NET 2.0 CF project
[StructLayout(LayoutKind.Sequential)]
public struct TableEntry
{
[MarshalAs(UnmanagedType.LPWStr)] public string description;
public int item;
public int another_item;
public IntPtr some_data;
}
[DllImport("MyDll.dll",
CallingConvention = CallingConvention.Winapi,
CharSet = CharSet.Auto)]
public static extern bool GetTable(ref TableEntry[] table);
SomeFunction()
{
TableEntry[] table = null;
bool success = GetTable(ref table);
// at this point, the table is empty
}
// In Native C++ DLL
std::vector<TABLE_ENTRY> global_dll_table;
extern "C" __declspec(dllexport) bool GetTable(TABLE_ENTRY* table)
{
table = &global_dll_table.front();
return true;
}
感謝, PaulH
難道不該TABLE_ENTRY **,既然你要編寫一個指針? – OregonGhost 2010-03-08 17:13:11
@OregonGhost - 你是對的,應該是。 – PaulH 2010-03-08 18:35:23