Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

OleCreatePictureIndirect 64 Bit-Problem

Forumthread: OleCreatePictureIndirect 64 Bit-Problem

OleCreatePictureIndirect 64 Bit-Problem
04.01.2020 17:41:17
feuerharry
Hy Nepumuk
Du hast mir schon einige mal geholfen und hoffe auch dieses Mal.
Habe mir eine Adressenverwaltung zusammengebaut. Läuft auf Office 2010 32Bit einwandfrei.
Bei Office 2016 64Bit leider nicht.
Die Prozedur bleibt immer bei **"Function Create_Picture stehen"**.
Würde sie aber für beide Programme brauchen.
https://www.herber.de/bbs/user/134152.zip
Danke im Voraus
VLG feuerharry
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: OleCreatePictureIndirect 64 Bit-Problem
05.01.2020 19:25:29
volti
Hallo Harry,
bei mir geht es jetzt. Hatte 'ne neue Idee ausprobiert, bzw. ganz neu ist sie gar nicht:
Für 64 Bit ist folgende Declare zu nehmen:
Public Declare PtrSafe Function OleCreatePictureIndirect Lib "oleaut32.dll" ( _
ByRef PicDesc As PIC_DESC, ByRef RefIID As GUID, _
ByVal fPictureOwnsHandle As LongPtr, ByRef IPic As IPictureDisp) As Long

Bei 64 Bit funktioniert die "olepro32.dll" nicht. Bei mir wurde sie auch gar nicht gefunden, obwohl sie da war. Die "oleaut32.dll" hatte ich auch in Deinem Tool schon ausprobiert, aber sie beisst sich offenbar mit der "olepro32.dll", zumindest bei mir. Nachdem ich alle "olepro32.dll" in "oleaut32.dll" geändert habe, klappt es wie gewünscht.
Möglicherweise funktioniert mit dem kompletten Austausch jetzt mit 32 Bit nicht mehr, das kann ich aber nicht ausprobieren.
Jetzt müsstest Du bei Dir ausprobieren, welche Kombination bei Dir passt.
Im Notfall müsstest Du ggf. zwei Dateiversionen vorhalten.
Ich drücke die Daumen.
viele Grüße
Karl-Heinz
Anzeige
AW: OleCreatePictureIndirect 64 Bit-Problem
05.01.2020 20:13:29
feuerharry
Hy Karl Heinz
Danke das du dich noch mal meldest.
Wo genau muss ich die 3 Zeilen einfügen. im API Modul ?
LG feuerharry
AW: OleCreatePictureIndirect 64 Bit-Problem
05.01.2020 20:21:50
feuerharry
Hy
bei office 2016 64bit sind im API Modul nach #else alle Public Declare Function rot
LG feuerharry
AW: OleCreatePictureIndirect 64 Bit-Problem
05.01.2020 20:35:46
feuerharry
Hy Karl Heinz
Alles Passt, habe es geschafft richtig einzufügen.
Danke für deine Nerven mit mir.
Wünsche dir noch einen schönen Feiertag.
VLG feuerharry---DANKE DANKE
Anzeige
;
Anzeige

Infobox / Tutorial

OleCreatePictureIndirect 64 Bit-Problematik in Excel


Schritt-für-Schritt-Anleitung

Um das Problem mit OleCreatePictureIndirect unter Office 2016 64 Bit zu lösen, kannst Du folgende Schritte befolgen:

  1. Öffne das VBA-Editor-Fenster in Excel (drücke ALT + F11).
  2. Navigiere zu deinem API-Modul, oder erstelle ein neues Modul, falls du noch keins hast.
  3. Füge die folgende Zeile zur Deklaration hinzu, um die Funktion für 64 Bit zu definieren:
    Public Declare PtrSafe Function OleCreatePictureIndirect Lib "oleaut32.dll" ( _
       ByRef PicDesc As PIC_DESC, _
       ByRef RefIID As GUID, _
       ByVal fPictureOwnsHandle As LongPtr, _
       ByRef IPic As IPictureDisp) As Long
  4. Stelle sicher, dass alle Verweise auf olepro32.dll in deinem Code durch oleaut32.dll ersetzt werden, da die olepro32.dll in 64 Bit nicht funktioniert.

Führe nach diesen Änderungen dein Programm erneut aus, um sicherzustellen, dass OleCreatePictureIndirect jetzt korrekt funktioniert.


Häufige Fehler und Lösungen

  1. Fehler: "Function Create_Picture steht"

    • Lösung: Überprüfe, ob die korrekten DLL-Dateien (oleaut32.dll statt olepro32.dll) verwendet werden.
  2. Fehler: DLL wird nicht gefunden

    • Lösung: Stelle sicher, dass die oleaut32.dll korrekt im System registriert ist. Eine Neuinstallation von Office kann helfen.

Alternative Methoden

Falls Du weiterhin Probleme mit OleCreatePictureIndirect hast, kannst Du alternative Methoden in Betracht ziehen:

  • Verwendung von "olepro32.dll" in 32 Bit: Wenn Du vorhast, Deine Anwendung sowohl in 32 Bit als auch in 64 Bit zu verwenden, könnte es sinnvoll sein, separate Versionen des Codes zu erstellen, die jeweils die entsprechenden DLLs nutzen.
  • Erstellen einer Wrapper-Funktion: Du kannst eine Wrapper-Funktion in VBA erstellen, die je nach Architektur die richtige Funktion aufruft.

Praktische Beispiele

Hier ist ein einfaches Beispiel, wie Du OleCreatePictureIndirect in einem VBA-Projekt verwenden kannst:

Sub Beispiel_OleCreatePicture()
    Dim PicDesc As PIC_DESC
    Dim IPic As IPictureDisp
    ' Setze alle notwendigen Parameter in PicDesc
    ' ...
    ' Aufruf der Funktion
    OleCreatePictureIndirect PicDesc, IID_NULL, True, IPic
    ' Verwende das IPic-Objekt nach Bedarf
End Sub

In diesem Beispiel wird OleCreatePictureIndirect aufgerufen, um ein Bild zu erstellen. Achte darauf, dass Du die Parameter korrekt setzt, um Fehler zu vermeiden.


Tipps für Profis

  • Halte Deine API-Deklarationen sauber und dokumentiere sie gut, um zukünftige Änderungen zu erleichtern.
  • Teste Deinen Code immer in einer 64-Bit-Umgebung, wenn Du OleCreatePictureIndirect verwendest, um sicherzustellen, dass alles reibungslos funktioniert.
  • Nutze Error-Handling in Deinem VBA-Code, um potenzielle Fehler beim Aufruf von externen Funktionen abzufangen.

FAQ: Häufige Fragen

1. Wo genau muss ich die drei Zeilen einfügen? Die Deklaration muss im API-Modul eingefügt werden, damit sie im gesamten Projekt verfügbar ist.

2. Funktioniert der Code auch in früheren Excel-Versionen? Der Code ist speziell für 64 Bit-Versionen von Excel 2016 optimiert. In 32 Bit-Versionen musst Du olepro32.dll verwenden. Achte darauf, die richtige DLL abhängig von der verwendeten Office-Version zu implementieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige