Hallo zusammen!
Ich habe folgendes Problem: Ich muss eine C++ API-Funktion in C# "konvertieren". Die C++ Funktion hat die Signatur:
Quelltext
1:
| HRESULT PXCp_TransformPage (PDFDocument pDocument, DWORD PageNumber, LPCPXC_Matrix matrix, DWORD flags); |
Die Matrix-Struktur ist wie folgt deklariert:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| public struct PXC_Matrix { public double a; public double b; public double c; public double d; public double e; public double f; }; |
Ich deklariere die API-Funktion im C#-Code auf diese Weise:
C#-Quelltext
1: 2:
| [DllImport("xcpro40")] public static extern int PXCp_TransformPage(int pDocument, int iPageNumber, ref PXC_Matrix pMatrix, int iFlags); |
Der Aufruf:
C#-Quelltext
1: 2: 3: 4: 5:
| var TransformMatrix = new PdfXchangePro.PXC_Matrix() { a = 0.0, b = 0.0, c = 0.0, d = 0.0, e = 2.0, f = 3.0 }; if (_documentId != 0) { int res = PdfXchangePro.PXCp_TransformPage(_documentId, 0, ref TransformMatrix, 0x0001); } |
wird mit einer AccesViolatioException "Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist." quittiert.
Ich habe dann im Forum einen ähnlichen Beitrag gefunden
www.c-sharp-forum.de...ssviolationexception und versucht die Deklaration der API-Funktion anzupassen:
C#-Quelltext
1:
| public static extern int PXCp_TransformPage(int pDocument, int iPageNumber, [MarshalAs(UnmanagedType.Struct)] ref PXC_Matrix pMatrix, int iFlags); |
Nun bekomme ich bei der Ausführung die gleiche Exception-Meldung. Ich verstehe schon, dass das Problem in der Handhabung des Speichers ist aber mögliche Lösung finde ich im Moment nicht. Kann jemand mir helfen?
Danke!
Moderiert von
Th69: B- durch C#-Tags ersetztModeriert von
Th69: Topic aus C# - Die Sprache verschoben am Mo 23.01.2012 um 12:38