C++ aşağıdaki yapı vardır:Mareşal C++ yapı dizisi
void GetData(LPRData *data);
: bu yapıların 3 dizisini almak için ben içine çağırarak/p olduğum
#define MAXCHARS 15
typedef struct
{
char data[MAXCHARS];
int prob[MAXCHARS];
} LPRData;
Ve bir işlev C
++ ben böyle bir şey yapmak sadece olacaktır:
LPRData *Results;
Results = (LPRData *)malloc(MAXRESULTS*sizeof(LPRData));
GetData(Results);
Ve sadece iyi çalışır, ancak C# Ben çalışmak için görünmektedir olamaz. Oluşturduğum böyle bir C# yapı:
public struct LPRData
{
/// char[15]
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 15)]
public string data;
/// int[15]
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 15)]
public int[] prob;
}
Ve o 3 (ve tüm bunların alt diziler) dizisi başlatmak ve bu içine geçerse:
GetData(LPRData[] data);
It başarı ile döndürür, ancak LPRData dizisindeki veriler değişmedi.
Hatta bir ham bayt sırayı 3 LPRData 's boyutunu oluşturmak ve böyle bir fonksiyon prototip içine geçmesi çalıştık:
GetData (byte [] veriler);
Ancak bu durumda, ilk LPRData yapısından "veri" dizesini elde edeceğim, ancak aynı LPRData'dan "prob" dizisi de dahil olmak üzere bundan sonra hiçbir şey yapamayacağım.
Bunu nasıl düzeltebileceğimize dair herhangi bir fikir var mı?
Bu yaklaşımı kullandım, ancak Mono'da değişkenlerin boş başvurular olarak ayarlandığına dair istisnalar alıyorum. Örneğin, "prob" sıfırdır, bu yüzden çalışmak istemez. Bunları bir noktada yenmek zorunda mıyım yoksa çerçevenin bir şekilde ele alınması gerekiyor mu? Teşekkürler – swinefeaster