Moin!
Ich habe folgendes Problem:
Bin von Excel 2003 auf Excel 2010 umgestiegen.
Für Excel 2003 habe ich ein AddIn, das Funktionen aus einer C++ .dll in vba einbindet um diese als Worksheet-Funktionen verwenden zu können.
Unter Excel 2003 (Windows XP/ SP3) funktioniert das alles einwandfrei.
Unter Excel 2010 (32 bit Office/ Windows 7 Enterprise 64 bit) liefert die Worksheet-Funktion nur #WERT zurück.
Versuche ich die Funktion aus der DLL direkt aus VBA anzusprechen, kriege ich die Fehlermeldung, dass die .dll-Datei nicht gefunden wurde, obwohl der Pfad Explizit im declare-Statement drin steht und die Datei bei sonstigen aufrufen über z.B. dir(Pfad) auch vorhanden ist.
Als Minimalbeispiel:
.dll enthält Funktion: DLL_qx(Int a, String s, String s2, Int b, Int c)
Im VBA Code:
Private Declare Function DLL_qx Lib "C:\MeineDll.dll" _
(ByVal a As Integer, ByVal s As String, ByVal s2 As String, ByVal b As Integer, ByVal c As Integer) As Double
Public function qx ( Int a, String s, String s2, int b, int c) as Double
qx=DLL_qx(a, s, s2, b, c)
End function
sub test()
a = dll_qx(27, "M", "1994", 0, 0)
Debug.Print a
End sub
Liefert nur "Datei nicht gefunden"
Verschiedene online vorgeschlagene Lösungen haben nicht funktioniert:
- Kopieren der .dll nach Sys64WOW, System32, registrieren der DLL über Regsvr32 (liefert Fehlermeldung),
- Dependency Walker liefert nur eine Abhängigkeit von der Kernel32.dll und die ist ja vorhanden.
- Änderung des Declare Statements auf Private Declare PtrSafe ...
- Einbinden der LoadLibrary Funktion aus der Kernel32.dll und direktes Laden von "MeineDll.dll" liefert als Rückgabewert 0 und Err.LastDllError 1114 (zu dem ich über Google nix sinnvolles gefunden habe - in den Microsoft Fehlerlisten kommt die Zahl nicht mal vor O_o)
- Über Extras-Verweise die .dll angeben hat auch nicht geholfen
- Ausschalten des Antivirus Programms hat ebenfalls nicht gefruchtet (ich hatte gelesen das Kaspersky wohl zum Teil API Calls über VBA unterbindet und gehofft das wäre bei Norton eventuell auch der Fall)
Ich bin dankbar für jeden weiteren Tipp
Viele Grüße
|