Schaffe es nicht meine C-DLL in Purebasic aufzurufen

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
24dan
Beiträge: 17
Registriert: 28.09.2005 17:46

Schaffe es nicht meine C-DLL in Purebasic aufzurufen

Beitrag von 24dan »

Hallo...,
habe mir eine Test - dll mit dem bcc zusammen gebaut:

Code: Alles auswählen


/* add.c for dll with command #BCC -WD add.c */

#include <stdio.h>

int maxi(void)
{
    printf("Hallo World\n");   
    return(1);
}
und wollte diese in Purebasic laden (geht auch)

Code: Alles auswählen

OpenConsole()
Input()
a.l = 100
If(0 = OpenLibrary(1, "add.dll"))
  Print("dll not found!")
Else
  a = OpenLibrary(1, "add.dll")
  Print(Str(a)+" ")
  If (0 = IsFunction(1, "maxi"))
    Print("function not found!")
  Else 
    a = CallCFunction(1, "maxi")
    Print(Str(a))
  EndIf
EndIf
CloseLibrary(1)

Input()
CloseConsole()
und dann die Funktion ausführen (geht nicht). :|
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

Beitrag von ts-soft »

Die DLL kann nicht in die von PB erzeugte Console schreiben. Du müßtest die Console auch in der DLL erzeugen oder die API statt der PB Console verwenden.

PS: Die Klammersetzung ist ja :freak: :wink:
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
24dan
Beiträge: 17
Registriert: 28.09.2005 17:46

Beitrag von 24dan »

1. Wie rufe ich den eine Console in c auf?
2. oder wie nutzte ich die API dazu?


ts-soft hat geschrieben: PS: Die Klammersetzung ist ja :freak: :wink:
Welcher Kl(J)ammern meinst DU :roll:
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
"Vielleicht ist diese Welt nicht die denkbar beste, aber sie ist die einzig mögliche."
(C. S. Lewis)
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

Beitrag von ts-soft »

>> Welcher Kl(J)ammern meinst DU

Code: Alles auswählen

If (0 = IsFunction(1, "maxi"))
funzt das überhaupt ???

Der beste Weg ist, den String als Rückgabewert der DLL zu definieren und diesen einfach in PB in eine Console Printen.

Alles andere wäre IMHO sehr Aufwendig und macht keinen Sinn
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
24dan
Beiträge: 17
Registriert: 28.09.2005 17:46

Beitrag von 24dan »

Ergebnis.l = IsFunction(#Library, FunktionsName$)
ja das müsste eigentlich gehen


und die übergabe von strings aus einer c lib ist nach meinem Kenntnisstand nur durch die Übergabe einer Adresse eines Arrays möglich.
Werde mich gleich an die Änderung setzten und mal schauen ob es klappt.
Danke
<)
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
"Vielleicht ist diese Welt nicht die denkbar beste, aber sie ist die einzig mögliche."
(C. S. Lewis)
24dan
Beiträge: 17
Registriert: 28.09.2005 17:46

Beitrag von 24dan »

So mal ganz einfach:

C Prog add.c -> add.dll

Code: Alles auswählen

#include <stdio.h>

int addvalue()
{
    return(7);
}

Basic Prog

Code: Alles auswählen

  OpenConsole()
    Input()
    a.l 
    If(0 <> OpenLibrary(1, "add.dll"))
      a = CallCFunction(1, "addvalue")
      Print(Str(a))
    EndIf
  CloseLibrary(1)
  Input()
  CloseConsole()
but it does not work
:allright:
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
"Vielleicht ist diese Welt nicht die denkbar beste, aber sie ist die einzig mögliche."
(C. S. Lewis)
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Es gab mal Probleme wenn man eine Konstante mit einer Proc vergleicht und die Konstante zuerst schreibt, also so wie "If(0 <> OpenLibrary(1, "add.dll"))" sollte eigentlich schon behoben sein, aber vielleicht probierste es einfach mal mit "If OpenLibrary(1, "add.dll")"
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ts-soft hat geschrieben:

Code: Alles auswählen

If (0 = IsFunction(1, "maxi"))
funzt das überhaupt ???
24dan hat geschrieben:Ergebnis.l = IsFunction(#Library, FunktionsName$)
ja das müsste eigentlich gehen
es geht hier nicht um ergebnis = Proc(), sondern um die klammerung..

ein ausdruck in klammern ist ein boole'scher ausdruck,
diese werden von PB leider, leider, leider nicht korrekt unterstützt.

demo:

Code: Alles auswählen

a=2
For n =0 To 5
    Debug (n>a)
Next
der output sollte lauten:
0
0
0
1
1
1
er lautet aber:
2
2
2
2
2
2
also, vergleichsoperatoren in klammern in PB nicht verwenden.
(solange, bis es endlich implementiert wird)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
24dan
Beiträge: 17
Registriert: 28.09.2005 17:46

Beitrag von 24dan »

@Kaeru Gaman

okay...
aber Zuweisungen funktionieren doch eigentlich oder?

Code: Alles auswählen

a = CallCFunction(1, "addvalue")
@Deeem2031

If (... ist jetzt angepasst. Es funktioniert jedoch immer noch nicht.

Kann es sein das ich mit dem Borland Compiler keine für PB verarbeitbare dll bauen kann?
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
"Vielleicht ist diese Welt nicht die denkbar beste, aber sie ist die einzig mögliche."
(C. S. Lewis)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

klar, die zuweisungen funktionieren...

nur boole'sche ausdrücke leider nicht... ich vermisse sie schrecklich...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten