Hallo Zusammen,
ich bin dabei einen Wrapper für Bildfunktionen und Konvertierungen umzustellen. Also bisher .Net 2.0 soll nun für .Net 4.6.2 migriert werden. Bisher lief alles prima und nun hänge ich an einer Funktion die umgestellt werden muss, um kompilierungsfähig zu sein.
Alte Version .Net 2.0:
Wegen der ref Anweisungen bei den Parametern der Funktion Print.getImage ref intPtr, ref num1 und Print.FreeImage ref intPtr ist eine Kompilierung unter .Net 4.6.2 nicht mehr möglich. Also habe ich bei den besagten Stellen ref gegen & ersetzt. Eine Kompilierung ist möglich aber führt nun zum Fehler: "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."
Hat Jemand eine Idee, wie die Migration auf .Net 4.6.2 aussehen muss?
Vielen Danke
ich bin dabei einen Wrapper für Bildfunktionen und Konvertierungen umzustellen. Also bisher .Net 2.0 soll nun für .Net 4.6.2 migriert werden. Bisher lief alles prima und nun hänge ich an einer Funktion die umgestellt werden muss, um kompilierungsfähig zu sein.
Alte Version .Net 2.0:
Code:
[DllImport("imageapi.dll", CharSet=CharSet.None, ExactSpelling=false)]
private static extern unsafe int getImage(int InputDPI, int OutputDPI, int pBlk, int pWht, double Gamma, int Sharpening, string InputFormat, byte* InputImage, UIntPtr InputImageSize, string OutputFormat, int AllocatedOutputImageSize, IntPtr* OutputImage, int* OutputImageSize);
public byte[] GetImage(int inputDPI, int outputDPI, int pBlk, int pWht, double gamma, int sharpening, string inputFormat, byte[] inputImage, string outputFormat)
{
unsafe
{
IntPtr intPtr = default(IntPtr);
byte* numPointer;
int num = 0;
byte[] numArray = null;
int num1 = 0;
byte[] numArray1 = inputImage;
byte[] numArray2 = numArray1;
if (numArray1 == null || (int)numArray2.Length == 0)
{
numPointer = null;
}
else
{
numPointer = &numArray2[0];
}
UIntPtr uIntPtr = new UIntPtr((uint)inputImage.Length);
num = Print.getImage(inputDPI, outputDPI, pBlk, pWht, gamma, sharpening, inputFormat, numPointer, uIntPtr, outputFormat, 0, ref intPtr, ref num1);
numPointer = null;
if (num != 0)
{
Trace.WriteLine(string.Concat("Print - GetImage: ", num.ToString()));
throw new PrintException(num, string.Concat("Print - GetImage: ", num.ToString()));
}
numArray = new byte[num1];
Marshal.Copy(intPtr, numArray, 0, num1);
Print.FreeImage(ref intPtr);
return numArray;
}
}
Wegen der ref Anweisungen bei den Parametern der Funktion Print.getImage ref intPtr, ref num1 und Print.FreeImage ref intPtr ist eine Kompilierung unter .Net 4.6.2 nicht mehr möglich. Also habe ich bei den besagten Stellen ref gegen & ersetzt. Eine Kompilierung ist möglich aber führt nun zum Fehler: "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."
Hat Jemand eine Idee, wie die Migration auf .Net 4.6.2 aussehen muss?
Vielen Danke