DLL aufruf aus Excel-Makro

Anfängerfragen zum Programmieren mit PureBasic.
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

DLL aufruf aus Excel-Makro

Beitrag 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
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: DLL aufruf aus Excel-Makro

Beitrag 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
Bild
Win11 Pro 64-Bit, PB_6.11b1
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Re: DLL aufruf aus Excel-Makro

Beitrag 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
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: DLL aufruf aus Excel-Makro

Beitrag von RSBasic »

@Martin66119
Wenn du Codes posten möchtest, dann verwende bitte auch die Code-Tags.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: DLL aufruf aus Excel-Makro

Beitrag 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 :wink:

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
- chris -
Beiträge: 195
Registriert: 24.08.2005 19:52
Wohnort: Stadtallendorf

Re: DLL aufruf aus Excel-Makro

Beitrag 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

PB v5.72 x86/x64
Windows 10 Pro 64bit
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Re: DLL aufruf aus Excel-Makro

Beitrag 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
- chris -
Beiträge: 195
Registriert: 24.08.2005 19:52
Wohnort: Stadtallendorf

Re: DLL aufruf aus Excel-Makro

Beitrag von - chris - »

PtrSafe wird für 64bit Excel benötigt.
Dann muß die DLL zu Excel passen 32bit oder 64bit.
PB v5.72 x86/x64
Windows 10 Pro 64bit
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Re: DLL aufruf aus Excel-Makro

Beitrag von Martin66119 »

Hab nur ein 32 bit system
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Re: DLL aufruf aus Excel-Makro

Beitrag von Martin66119 »

Unter welchem Namen muss ich denn die Dll speichern. Unter MyFunction oder irgend ein anderer Name
Antworten