VBA-Call nach MS Office 2007 Installation: Datei nicht gefunden

17/10/2007 - 11:19 von Dieter | Report spam
Hallo,

ich hoffe, jemand in diesem Forum hat eine Lösung für mein Problem.

Zusammenfassung:
Folgendes Problem resultiert aus der Installation von Microsoft Office 2007
(hier: Enterprise): Ein Call aus einer Microsoft-Access-MDE (geöffnet von der
Access97-Runtime) auf eine C-Dll im Arbeitsverzeichnis führt zu der Meldung:
"Datei nicht gefunden: myrw32.dll".

Die Konstellation:
- AccessRuntime (im shared Runtime-Verzeichnis) öffnet eine Access-MDE im
Arbeitsverzeichnis.
- Einige C-DLLs (Microsoft C 6.0, nur abhàngig von kernel32.dll und
ntdll.dll) mit komplexen Berechnungen werden in das Arbeitsverzeichnis
installiert. Die (native) C-Dlls laufen auch unter Unix, sie werden nicht
registriert und können sich auch nicht selbst registrieren.
- Das Arbeitsverzeichnis ist nicht in der Umgebungsvariablen Path.
- Der Prozeß befindet sich im Arbeitsverzeichnis (siehe
GetCurrentDirectory() aus kernel32).

Source code:
Declare Sub MyRW Lib "myrw32.dll" Alias "myAliasRW" (myrec As myrw_typ)
Call MyRW (srw_rec)

Return:
"Datei nicht gefunden: myrw32.dll".

Selbst wenn ich versuche, eine der Dlls mit LoadLibrary (mit vollem Pfad zur
DLL) zu laden, erhalte ich den Wert 0 im Handle.

Das Problem existiert sowohl unter Windows-XP als auch unter Windows-Vista,
hat als nichts mit der Virtualisierung zu tun. Die Software funktioniert,
wenn sie parallel mit àlteren Office Versionen (zum Beispiel 2003)
installiert wird. Sie funktioniert auch, wenn man Mircosoft Office 2007
wieder deinstalliert! Es sieht also so aus, dass irgend etwas aus der
Mircosoft Office 2007 Installation die Access-Runtime daran hindert, die DLL
in dem Arbeitsverzeichnis zu finden.

Die vorhandenen Workarounds sind nicht besonders empfehlenswert:
- Erweiterung der Umgebungsvariablen Path: Aufwand für die Hotline; und was
ist, wenn der Nutzer nàchstes Mal in einen anderen Pfad installiert?
- Installation der DLLs in das Runtime-Verzeichnis (Start-Verzeichnis):
Sollte man bei gemeinsam genutzten Verzeichnissen lieber unterlassen?
- Installation in die Windows-Verzeichnisse: Unter Vista mit UAC?

Mehr und mehr Anwender werden sich Office 2007 installieren. Das wird mein
Problem verschàrfen.

Was kann ich tun, damit die DLLs zuverlàssig im Arbeitsverzeichnis gefunden
werden?

Vielen Dank an die, die eine Antwort wissen, und an alle anderen, die bis
hier gelesen haben.

Gruß Dieter

P.S.: Ich habe den Beitrag von Thorsten Albers in "German\Developer\VB
Allgemein" gelesen, er hilft mir aber nicht richtig weiter.
 

Lesen sie die antworten

#1 Dieter
10/01/2008 - 15:38 | Warnen spam
Leider fehlte noch eine Randbedingung, damit das Problem vollstàndig
beschrieben ist: Vor dem Call auf myrw.dll wird noch eine (ebenfalls nicht
registrierte) Delphi-DLL zur MAPI -Kommunikation gerufen. Nur wenn diese
Delphi-DLL gerufen wird und Office 2007 installiert ist, tritt das Problem
auf. Wenn eine Bedingung nicht erfüllt ist, funktioniert alles bestens.

Von daher kann dieser Thread als erledigt betrachtet werden, wir werden die
Delphi-DLL ersetzen.

Ähnliche fragen