olampl
Lt. Commander
- Registriert
- Aug. 2005
- Beiträge
- 1.691
Hallo,
muss einer C++ dll einen Pointer auf ein Array mit structs übergeben, dieses soll dann gefüllt werden (daher out Param).
// Strucktur
//
Die Version der dll kann ich auslesen, aber das war es auch.
Als fehler meldung bekomme ich "Object reference not set to an instance of an object"
hat jemand eine idee!
muss einer C++ dll einen Pointer auf ein Array mit structs übergeben, dieses soll dann gefüllt werden (daher out Param).
Code:
[DllImport("gngetsol.dll", EntryPoint="GNSol_query", CharSet = CharSet.Auto)]
public static extern int GNSolQuery( out IntPtr id_array, int maxIds, out int vailIds);
// Strucktur
Code:
[ StructLayout( LayoutKind.Sequential, Size = 36,CharSet=CharSet.Ansi )]
public struct GNSolId
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=8)]
public string Owner;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=8)]
public string Rcvid;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=8)]
public string Outid;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=8)]
public string Name;
public int Ok;
}
//
Code:
int bar = 0;
arGnSolidId = new GeoPPWrapper.GNSolId[32];
for (int i = 0; i< arGnSolidId.Length; i++)
{
arGnSolidId[i] = new GNSolId();
}
// Umwandlung in unmanaged
IntPtr ptr = Marshal.AllocCoTaskMem(Marshal.SizeOf(arGnSolidId[0]) * (arGnSolidId.Length));
IntPtr ptrRunner = ptr;
for (int i=0; i<arGnSolidId.Length; i++)
{
Marshal.StructureToPtr(arGnSolidId[i], ptrRunner, false);
ptrRunner = (IntPtr)((int)ptrRunner + Marshal.SizeOf(arGnSolidId[0]));
}
int foo = GeoPPWrapper.GeoPPWrapper.GNSolQuery( out ptr , 32 ,out bar );
Die Version der dll kann ich auslesen, aber das war es auch.
Als fehler meldung bekomme ich "Object reference not set to an instance of an object"
hat jemand eine idee!
Zuletzt bearbeitet:
(Ergänzung)