Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1728to1732
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Declare Function OleCreatePictureIndirect

Declare Function OleCreatePictureIndirect
03.01.2020 12:31:11
feuerharry
Hy an alle Fachkräfte
Mein Programm läuft auf Office 2010 32Bit einwandfrei, aber auf 64Bit bleibt es bei Declare Function OleCreatePictureIndirect in der vorletzen Zeile stecken.
Meine Frage:
Gibt es eine Anwendung, wo das Programm auf beiden Versionen läuft (32 +64Bit), wenn ja wo muss ich das einfügen?
Muss ich für beide Versionen verwenden !!!
Habe alle Private Declare Function geändert auf Private Declare PtrSafe Function.
https://www.herber.de/bbs/user/134112.xlsm
***************************************************************************
Private Function Create_Picture( _
ByVal plnghPic As Long) As IPictureDisp
Dim udtPicInfo As PIC_DESC, udtID_IDispatch As GUID
Dim objPicture As IPictureDisp
With udtID_IDispatch
.Data1 = &H20400
.Data4(0) = &HC0
.Data4(7) = &H46
End With
With udtPicInfo
.lngSize = Len(udtPicInfo)
.lngType = PICTYPE_BITMAP
.lnghPic = plnghPic
.lnghPal = 0
End With
Call OleCreatePictureIndirect(udtPicInfo, udtID_IDispatch, 0&, objPicture) '**bleibt hier  _
Stecken
Set Create_Picture = objPicture
End Function

************************************************************************
MFG feuerharry

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Declare Function OleCreatePictureIndirect
03.01.2020 13:45:16
volti
Hallo Feuerharry,
ich kenne die Funktion zwar nicht, aber andere Strukturen möchten unter 64 Bit gerne LenB für SizeOf-Angaben.
Probiere es einfach mal aus:
Private Function Create_Picture( _
        ByVal plnghPic As Long) As IPictureDisp
    Dim udtPicInfo As PIC_DESC, udtID_IDispatch As GUID
    Dim objPicture As IPictureDisp
    With udtID_IDispatch
        .Data1 = &H20400
        .Data4(0) = &HC0
        .Data4(7) = &H46
    End With
    With udtPicInfo
        .lngSize = LenB(udtPicInfo)
        .lngType = PICTYPE_BITMAP
        .lnghPic = plnghPic
        .lnghPal = 0
    End With
    Call OleCreatePictureIndirect(udtPicInfo, udtID_IDispatch, 0&, objPicture)
    Set Create_Picture = objPicture
End Function

viele Grüße
Karl-Heinz

Anzeige
AW: Declare Function OleCreatePictureIndirect
03.01.2020 13:59:15
feuerharry
Hy Karl-Heinz
Bleibt leider noch immer an der selben Zeile stecken
LG feuerharry
'Declare Function OleCreatePictureIndirect' sehe …
03.01.2020 15:51:19
Luc:-?
…ich nirgends, Harry,
nur ein Call. Ein separates Declare von API-Fktt sieht nämlich unter 64Bit etwas anders aus als unter 32Bit. Aber das wissen die Spezialisten genauer.
Gruß, Luc :-?
„Der beste Beweis für intelligentes Leben im Universum ist, dass noch niemand versucht hat, Kontakt mit uns aufzunehmen.“ H.Lesch, 2018, Sonneberg
Deshalb Intelligenz steigern mit …

Anzeige
AW: Declare Function OleCreatePictureIndirect
03.01.2020 16:39:05
feuerharry
Hy an alle Fachkräfte
Mein Programm läuft auf Office 2010 32Bit einwandfrei, aber auf 64Bit bleibt es bei Declare Function OleCreatePictureIndirect in der vorletzen Zeile stecken.
Meine Frage:
Gibt es eine Anwendung, wo das Programm auf beiden Versionen läuft (32 +64Bit), wenn ja wo muss ich das einfügen?
Muss ich für beide Versionen verwenden !!!
Habe alle Private Declare Function geändert auf Private Declare PtrSafe Function.
https://www.herber.de/bbs/user/134112.xlsm
***************************************************************************
Private Function Create_Picture( _
ByVal plnghPic As Long) As IPictureDisp
Dim udtPicInfo As PIC_DESC, udtID_IDispatch As GUID
Dim objPicture As IPictureDisp
With udtID_IDispatch
.Data1 = &H20400
.Data4(0) = &HC0
.Data4(7) = &H46
End With
With udtPicInfo
.lngSize = Len(udtPicInfo)
.lngType = PICTYPE_BITMAP
.lnghPic = plnghPic
.lnghPal = 0
End With
Call OleCreatePictureIndirect(udtPicInfo, udtID_IDispatch, 0&, objPicture) '**bleibt  _
hier  _
Stecken
Set Create_Picture = objPicture
End Function
************************************************************************
MFG feuerharry
Anzeige
AW: Declare Function OleCreatePictureIndirect
03.01.2020 16:57:43
Sulprobil
Hallo,
Wenn ich nicht irre, muss der eine Parameter LongPtr und nicht Long sein:
ByVal fPictureOwnsHandle As LongPtr, _
Viele Grüße,
Bernd P
AW: Declare Function OleCreatePictureIndirect
03.01.2020 17:29:58
feuerharry
Hy
Funktioniert leider auch nicht
LG feuerharry
AW: Declare Function OleCreatePictureIndirect
03.01.2020 17:39:24
volti
Hallo Feuerharry,
ich bin's noch mal . War 'ne Weile weg und habe gerade noch mal in Deine Datei geschaut. Da ist mir folgendes aufgefallen:
Deine ganzen Declares für die API-Funktionen sind nicht korrekt umgestellt.
Soll Deine Aussage Habe alle Private Declare Function geändert auf Private Declare PtrSafe Function. etwa heißen, dass Du einfach überall nur PtrSafe reingeschrieben hast?
Das reicht für die meisten Funktionen nicht aus. Alle Handle in Deinen Declarationen und auch in der Verwendung in allen Sub's/Function's müssen auf LongPtr umgestellt werden.
Teilweise müssen die Type-Strukturen angepasst werden, so wie ich es mit meiner Antwort von heute morgen bereits habe anklingen lassen.
Unter Deiner Version 16 sollte dann Dein Tool mit den neuen Declares sowohl unter 32 wie auch 64 Bit funktionieren. Für ältere Win-Versionen müssten ansonsten mittels Compiler-#IF Win64 sowohl die alten 32-Bit Declares als auch die neuen 64-Bit Declares vorgehalten werden und in den Sub's natürlich auch mit beiden Varianten per Compiler-Schalter gearbeitet werden.
Falls Du das nicht selbst machen möchtest oder kannst, kann ich mich gern mal daran versuchen. Kann aber etwas dauern, das ist 'ne Menge Holz....
viele Grüße
Karl-Heinz
Anzeige
AW: Declare Function OleCreatePictureIndirect
03.01.2020 18:12:36
feuerharry
Hy Karl-Heinz
Danke erstmal das du dich meinem Problem annimmst.
Sollte auf beide Versionen laufen ( 32Bit= Office 2010 + 64Bit= Office 2016)
Zu Frage 1: habe nur alle Declare auf DeclarePtrSafe geändert.
Das Programm ist von Verschiedenen Seiten zusammengestoppelt worden.
Da ich mich in vba fast nicht auskenne würde ich dich bitten es zu ändern. Mache aber Bitte in jeder Zeile einen vermerk was du geändert hast. Da es sich nur um eine Testdatei handelt, muss ich sie dann im meinen Programm einfügen.
Besten Dank im Voraus
feuerharry
AW: Declare Function OleCreatePictureIndirect
03.01.2020 23:25:31
volti
Hallo Harry,
in anliegender Datei habe ich Dir die 64-Bit Deklarationen eingebaut und auch wie gewünscht die 32 Bit Deklarationnen für ältere Versionen drin gelassen.
Hierzu habe ich das neue Modul API eingefügt und alles auf Public umgestellt. Dann muss man nicht in jedem Userform-Modul immer wieder das selbe machen, weil das ja mehrfach genutzt wird.
https://www.herber.de/bbs/user/134126.xlsm
Geändert habe ich nur in den Userform-Modulen etwas, nicht in den normalen Modulen.
Leider gibt es Probleme mit der olepro32.dll. Diese wird bei mir im System32-Ordner nicht gefunden und ich kann sie auch nicht reinkopieren. Deshalb kann die Funktion nicht aufgerufen werden. Ich werde das bei mir jetzt aber nicht weiterverfolgen...
Ggf. läuft es bei Dir ja. Hat denn das Einfügen eines Bildes bisher funktioniert? Dann müsste die DLL bei Dir ja vorhanden sein.
Da ich kein 32 Bit mehr hier habe, kann ich das nicht ausprobieren.
Ansonsten kann ich hier wohl leider nicht weiterhelfen.
viele Grüße
Karl-Heinz
Anzeige
AW: Declare Function OleCreatePictureIndirect
04.01.2020 10:34:22
feuerharry
Hy Karl-Heinz
Danke das du die Zeit für mein Problem opferst.Hast wahrscheindlich die halbe Nacht gewerkt.
Leider funzt es nicht.
Bei Office 2010 passt folgendes nicht:
Datensatz ändern speichert auf Tabellenblatt" Gruppe"
Bei Office 2016 passt folgendes nicht: Bei doppelclick auf Listfeld bleibt Makro noch immer stecken bei Private Function Create_Picture
***** Call OleCreatePictureIndirect(udtPicInfo, udtID_IDispatch, 0&, objPicture)****
den weiteren verlauf kann ich noch nicht ausprobieren.
VLG feuerharry
AW: Declare Function OleCreatePictureIndirect
04.01.2020 13:25:35
volti
Hallo Harry,
mal vorab: Ich weiß natürlich nicht, was Du da eigentlich genau machst. Deswegen sagt mir die Aussage Datensatz ändern speichert auf Tabellenblatt" Gruppe" zunächst mal nichts.
Wo sollte er denn speichern?
Mir ist auch nicht klar, warum bei zwei Office-Versionen verschiedene Speicher-Orte verwendet werden sollten, wenn nur die Declares und Handles geändert wurden.
Wir reden aber schon von der selben Datei, die Du auf zwei Officeversionen getestet hast?
Auch lässt die Aussage Bei Office 2016 passt folgendes nicht vermuten, dass es bei Office 10 funktioniert. Ist dem so?
Ich schaue noch mal rein (interessiert mich halt), zwischenzeitlich postet Du hier die genaue Fehlermeldung (Screenshot). "Bleibt stecken" reicht hier nicht...:-)
Ich befürchte allerdings, dass die DLL nicht richtig installiert ist, fehlt oder nicht 64Bit-tauglich ist. An den Handles kann es m.E. nicht mehr liegen.
viele Grüße
Karl-Heinz
Anzeige
AW: Declare Function OleCreatePictureIndirect
04.01.2020 13:38:35
feuerharry
Hy Karl-Heinz
Sorry für die doppelich Arbeit aber ich bekomme es leider nicht hin.
Sende dir die original Datei. schau sie dir bitte, bitte an.
Habe laut deiner Änderungen alles nur auscommandiert und das API Mudul eingefügt.
https://www.herber.de/bbs/user/134142.zip
Danke im Voraus
VLG feuerharry
VLG feuerharry
AW: Declare Function OleCreatePictureIndirect
04.01.2020 14:33:07
volti
Naja Harry,
da hast Du wohl nicht alles umgesetzt und etwas Durcheinander reingebracht :-)
Auch ist das nicht deckungsgleich mit dem alten: z.B. GC_CLASSNAMEMSEXCELFORM gab es da nicht....
Außerdem fehlt noch Dein Screenshot von der Fehlermeldung.
VG KH
Anzeige
AW: Declare Function OleCreatePictureIndirect
04.01.2020 15:15:44
feuerharry
Hy
Ja ich habe geglaubt, die erweiterungen machen nix aus. sorry
Sende dir den Screeshott von office 2016 64Bit
Userbild
lg feuerharry
AW: Declare Function OleCreatePictureIndirect
04.01.2020 15:25:19
volti
Hi Harry,
das ist keine Fehlermeldung, sondern nur der gelb unterlegte Fundort. Da kann ich nix mit anfangen.
Es muss doch eine Msgbox gekommen sein, oder?
VG KH
AW: Declare Function OleCreatePictureIndirect
04.01.2020 15:41:11
feuerharry
Hy Karl Heinz
Nein keine msg box nur der Haltepunkt.
Dann muss ich Makro beenden.
LG harry
AW: Declare Function OleCreatePictureIndirect
04.01.2020 15:51:27
volti
Hallo Harry,
hier hast Du Deine überarbeitete Datei zurück. Hoffe, ich habe alle Stellen erwischt und es kommen keine Fehler bzgl. 32/64 Bit.
Leider krieg ich die DLL hier bei mir nicht zum Laufen (habe Office 365, 64 Bit) und kann Dir daher auch nicht mehr weiterhelfen, sorry.
Ohne mit den Originaldateien und Versionen arbeiten zu können, kann ich aus der Ferne das nicht lösen, zumal Vorschläge zu diesem Thema im Netz bei mir auch nicht funktionieren.
https://www.herber.de/bbs/user/134150.zip
Vielleicht weiß ja jemand anderes noch etwas dazu....
viele Grüße aus Hessen
Karl-Heinz
Anzeige
AW: Declare Function OleCreatePictureIndirect
04.01.2020 16:26:32
feuerharry
Hy Karl Heinz
Leider bleibt es auf office 2016 noch immer auf folgender Zeile stehen
****Call OleCreatePictureIndirect(udtPicInfo, udtID_IDispatch, 0&, objPicture)****
Trotzdem recht herzlichen Dank für deine Bemühungen.
eine Frage noch: Wie soll ich die Frage im Forum stellen damit mir jemand hilft.
Bin leider schon 68 Jahre, mache das als Hobby für meine Enkelkinder.
VLG feuerharry
wünsche Dir alles Gute im neuen Jahr.
DANKE DANKE
AW: Declare Function OleCreatePictureIndirect
04.01.2020 16:37:23
volti
Na da sind wir ja im gleichen Jahrzehnt geboren, :-)
Vielleicht als Frage "OleCreatePictureIndirect 64 Bit-Problem".
Vielleicht weiß ja Nepumuk was dazu, der hat doch immer gute Ideen.
Dir auch ein gutes Jahr 2020.
Karl-Heinz
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige