![]() |
COM DLL / Methodenaufruf mit Rückgabe
Hallo zusammen,
ich hab folgendes Problem an dem ich mir jetzt schon mehrere Tage die Zähne ausgebissen... Vieleicht hat hier noch jemand eine Idee. Bei Google bin ich auch nicht fündig geworden. Ich binde eine COM Dll in meine Applikation ein die mir Images zurückgibt. Das funktioniert auch solang ich Funktionen dieser DLL nutze. Für bestimmte Formate muss ich aber Prozeduren aufrufen die mir ein Image zurück liefern. In c# funktioniert das auch hervorragend. Bei Delpi bekomme ich immer eine Acception. Ich hab meinen Sourcecode angehängt. Vieleicht hat jemand mal zeit kurz darüber zu schauen... Grüße Mark
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const ImageType = 102; var myImageAC: TImageAC; myBitmapImage: TBitmapImage; tempBitmap: TBitmap; tempPicture: TPicture; begin myImageAC := TImageAC.Create(Self); myImageAC.OpenImage('C:\Temp\DemoSlide\TestSlide'); myImageAC.Connect; // myBitmapImage := TBitmapImage.Create(Self); myBitmapImage.ConnectTo(myImageAC.GetSingleImage(ImageType)); // Def. der Funktion : function GetSingleImage(ImageType: Integer): IBitmapImage; // tempPicture := TPicture.Create; SetOlePicture(tempPicture, myBitmapImage.Picture as IPictureDisp); // tempBitmap := TBitmap.Create; tempBitmap.Height := tempPicture.Height; tempBitmap.Width := tempPicture.Width; tempBitmap.Canvas.Draw(0, 0, tempPicture.Graphic); tempBitmap.SaveToFile('C:\temp\testBitmap.tiff'); tempBitmap.Free; tempPicture.Free; myBitmapImage.Free; //<-------------------------------- bis hier funtioniert alles. // myBitmapImage := TBitmapImage.Create(Self); // myImageAC.GetImageMap(7, myBitmapImage); // Def. der Funktion : procedure GetImageMap(Magnification: Integer; var pPicture: IBitmapImage); //< Hier komm ich nicht weiter da die Variable vom Type Interface ist > end; |
AW: COM DLL / Methodenaufruf mit Rückgabe
Und warum definierst du myBitmapImage nicht als Interface?
|
AW: COM DLL / Methodenaufruf mit Rückgabe
Bekomme ich folgende Meldung:
[dcc32 Fehler] UnitMain.pas(105): E2018 Record, Objekt oder Klassentyp erforderlich |
AW: COM DLL / Methodenaufruf mit Rückgabe
Delphi-Quellcode:
var
img : IBitmapImage; ... begin // dein bisheriger Code hier ... img := nil; myImageAC.GetImageMap(7, myBitmapImage); // Def. der Funktion : procedure GetImageMap(Magnification: Integer; var pPicture: IBitmapImage); if not Assigned(img) then raise Exception.Create('Fehler bei GetImageMap(7)); // und ab hier kann man mit dem Interface in 'img' arbeiten |
AW: COM DLL / Methodenaufruf mit Rückgabe
Meinst du :
Delphi-Quellcode:
lässt sich kompilieren aber zu Laufzeit bekomme ich eine 'access violation at 0x10004360: read of address 0x0000001c'
var
img : IBitmapImage; ... begin // dein bisheriger Code hier ... img := nil; myImageAC.GetImageMap(7, img); //<-------------------- if not Assigned(img) then raise Exception.Create('Fehler bei GetImageMap(7)); |
AW: COM DLL / Methodenaufruf mit Rückgabe
Das ist die definition aus der DLL Beschreibung.
HRESULT GetImageMap([in] long Magnification,[in, out] IBitmapImage* pPicture) |
AW: COM DLL / Methodenaufruf mit Rückgabe
Hab die Lösung gefunden: :-D
Grüße Mark
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var myImageAC: TImageAC; myTBitmapImage: TBitmapImage; myIBitmapImage: ^IBitmapImage; tempBitmap: TBitmap; tempPicture: TPicture; begin myImageAC := TImageAC.Create(Self); myImageAC.OpenImage('C:\Temp\DemoSlide\TestSlide'); myImageAC.Connect; // myTBitmapImage := TBitmapImage.Create(Self); myIBitmapImage := Pointer(myTBitmapImage.DefaultInterface); // myImageAC.GetImageMap(7, myIBitmapImage^); // tempPicture := TPicture.Create; SetOlePicture(tempPicture, myTBitmapImage .Picture as IPictureDisp); tempBitmap := TBitmap.Create; tempBitmap.Height := tempPicture.Height; tempBitmap.Width := tempPicture.Width; tempBitmap.Canvas.Draw(0, 0, tempPicture.Graphic); tempBitmap.SaveToFile('C:\temp\testBitmap.tiff'); tempBitmap.Free; tempPicture.Free; myTBitmapImage.Free; myImageAC.Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz