Seite 1 von 3
DLL aufruf aus Excel-Makro
Verfasst: 21.02.2014 21:40
von Martin66119
Guten Abend,
aus der PB-Hilfe habe ich fogende den Code als dll compiliert und als PureBasic.dll gespeichert.
Code: Alles auswählen
If OpenLibrary(0, "PureBasic.dll")
CallFunction(0, "MyFunction")
CloseLibrary(0)
EndIf
Wie kann ich nun diese dll aus einem ExcelMakro aufrufen. Hat jemand einen BeispielCode.
Danke bereits hier
__________________________________________________
Code-Tags hinzugefügt
21.02.2014
RSBasic
Re: DLL aufruf aus Excel-Makro
Verfasst: 21.02.2014 22:26
von Falko
Wenn ich das richtig verstanden habe, willst du in Purebasic eine DLL erstellen, die mit PB-Funktionen
alias ProcedureDLL Funktionsname(Parameter1,Parameter2...) , ...., Endprocedure, irgendwas machen soll, was du in PB programmieren möchtest.
Das was du hier im Code zeigst, ist keine DLL, sondern der Teil, der diese DLL in PB läd und die
Funktionen aus den ProcedureDlls ausführt, wenn diese als Dll Compiliert wurden. Siehe PB-Hilfe.
Um diese aber in VBA in Excel aufzurufen müsstest du vermutlich das Beispiel aus einem VBA-Forum entnehmen.
Ich denke mal, das es sowas ist:
http://www.vb-paradise.de/programmieren ... post559923
Kann aber sein, das ich dich missverstanden habe.
Gruß,
Falko
Re: DLL aufruf aus Excel-Makro
Verfasst: 21.02.2014 22:35
von Martin66119
Sorry,
wollte eigentlich folgendes reinkopieren: Es wird kein Parameter übergeben
Code: Alles auswählen
ProcedureDLL MyFunction()
MessageRequester("Hallo", "Dies ist mal ein DLL Test: PureBasic DLL !", 0)
Input$ = InputRequester("Titel", "Bitte machen Sie Ihre Eingabe:", "Ich bin die Standardeingabe.")
If Input$ > ""
a$ = "Sie haben folgendes in den Requester geschrieben:" + Chr(10) ; Chr(10) wird nur für
a$ + Input$ ; den Zeilenumbruch benötigt
Else
a$ = "Der Requester wurde abgebrochen oder es wurde nichts eingegeben."
EndIf
MessageRequester("Information", a$, 0)
EndProcedure
__________________________________________________
Code-Tags hinzugefügt
21.02.2014
RSBasic
Re: DLL aufruf aus Excel-Makro
Verfasst: 21.02.2014 22:38
von RSBasic
@Martin66119
Wenn du Codes posten möchtest, dann verwende bitte auch die Code-Tags.
Re: DLL aufruf aus Excel-Makro
Verfasst: 21.02.2014 22:58
von ts-soft
Deine Frage hat nun mal gar nichts mit PB zu tun. Mit solchen Fragen bist Du in einem VBA-Forum besser aufgehoben.
Hier würde eher passen:
Was muß ich bei der Erstellung einer DLL beachten, wenn diese von VBA/Excel aus genutzt wird.
- Aufrufconvention
- Stringcodierung
- Stringformat
- usw.
Der von Falko gepostete Link sollte Dir schon mal die erste Anlaufstelle geben.
PS: Nach 9 Jahren sollte das mit den Codetags aber langsam klappen
Gruß
Thomas
Re: DLL aufruf aus Excel-Makro
Verfasst: 22.02.2014 01:13
von - chris -
DLL in Excel einbinden:
Code: Alles auswählen
Private Declare PtrSafe Sub MyFunction Lib "D:\ExcelDLL\MyFunction.dll" ()
Sub ExcelDLL_MyFunction()
Call MyFunction
End Sub
Mit Wert übergabe:
Code: Alles auswählen
Declare PtrSafe Function Wert01 Lib "D:\ExcelDLL\werte.dll" () As Long
Declare PtrSafe Function Wert02 Lib "D:\ExcelDLL\werte.dll" (ByVal wert As Long) As Long
Private Function ExcelDLL_Wert01()
ExcelDLL_Wert01 = Wert01()
End Function
Private Function ExcelDLL_Wert02(wert As Long)
ExcelDLL_Wert02 = Wert02(wert)
End Function
Re: DLL aufruf aus Excel-Makro
Verfasst: 22.02.2014 13:20
von Martin66119
Vielen vielen Dank für die Hilfe!
Mit Pure Basic habe ich für folgenden Beispielcode eine dll erstellt und auch getestet, ob diese aus einer PB.exe aufgerufen wird. Das hat geklappt. Nun der dll-Beispielcode. Die Dll habe ich gespeichert als ExcelDll.Dll
Code: Alles auswählen
ProcedureDLL MyFunction()
MessageRequester("Hallo", "Dies ist eine PureBasic DLL !", 0)
Input$ = InputRequester("Titel", "Bitte machen Sie Ihre Eingabe:", "Ich bin die Standardeingabe.")
If Input$ > ""
a$ = "Sie haben folgendes in den Requester geschrieben:" + Chr(10) ; Chr(10) wird nur für
a$ + Input$ ; den Zeilenumbruch benötigt
Else
a$ = "Der Requester wurde abgebrochen oder es wurde nichts eingegeben."
EndIf
MessageRequester("Information", a$, 0)
EndProcedure
Folgenden Code von dir habe ich ich in Excel als Makro übernommen.
Code: Alles auswählen
Private Declare PtrSafe Sub MyFunction Lib "D:\PB\ExcelDLL\MyFunction.dll" ()
Sub ExcelDLL_MyFunction()
Call MyFunction
End Sub
Die DLL als auch die Excel habe ich in D:\PB\ExcelDll\ gespeichert.
Wenn ich nun die Excel ausführe, kommt die Fehlermeldung "Fehler beim Compilieren: Erwartet Sub oder Function. Und in der Zeile "Private Declare PtrSafe Sub MyFunction Lib "D:\PB\ExcelDLL\MyFunction.dll" ()" ist PtrSafe markiert. Wenn ich PtrSafe lösche, kommt beim comoilieren die Fehlermeldung Datei nicht gefunden: D:\PB\ExcelDll\MyFuction.dll
Habe ich irgendwas mit den Namen falsch?
Grüße
Re: DLL aufruf aus Excel-Makro
Verfasst: 22.02.2014 13:50
von - chris -
PtrSafe wird für 64bit Excel benötigt.
Dann muß die DLL zu Excel passen 32bit oder 64bit.
Re: DLL aufruf aus Excel-Makro
Verfasst: 22.02.2014 13:52
von Martin66119
Hab nur ein 32 bit system
Re: DLL aufruf aus Excel-Makro
Verfasst: 22.02.2014 13:55
von Martin66119
Unter welchem Namen muss ich denn die Dll speichern. Unter MyFunction oder irgend ein anderer Name