| |
|
|
Christian Eichler | Mal wieder hab ich ein Problem: Ich weiß nicht, wie ich in C++ in diesem Fall einen double - Wert zurückgeben kann... [siehe Anhang] Das Problem bei der DLL im Anhang ist, dass das Profanprogramm (die .prf-Datei) einen anderen Wert druckt, wie in der DLL eigentlich steht ... Wie geht das
mfg Christian E
PS: Ja, ich kann mir vorstellen, dass ich euch langsam langweile ... |
|
|
| Debian Lenny, Intel Celeron 2,8 Ghz, 768 MB Ram && Win XP Pro, Intel C2D 1,66Ghz, 2 GB Ram ... PROFAN² 6.6 | 12.12.2007 ▲ |
|
|
|
|
Michael Wodrich | Float unter C, da gibt es die 4 Byte großen und die 8 Byte großen.
Bei den kleineren mußt Du mit Single/Double umwandeln (siehe in der Hilfe).
Vielleicht schreibt Sebastian uns ja mal ein Tutorial zur Erstellung von C-DLLs - mit Übergabe/Rückgabe aller Profanwerte. Dann wäre alles dazu auf einem Fleck.
PS: Ja, ich kann mir vorstellen, dass ich euch langsam langweile ...
Deine Fragen sind doch immer sehr interessant...
Wozu muß die Funktion eigentlich CALLBACK sein? Hast Du es mal ohne diese Angabe versucht?
Schöne Grüße Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 12.12.2007 ▲ |
|
|
|
|
Frank Abbing | Übergib einfach einen Zeiger auf einen Speicherbereich. In dem kannst du beliebig viele Bytes speichern. |
|
|
| |
|
|
|
Sebastian König | |
|
| |
|
|
|
Christian Eichler | Hmm... seit einer Stunde versuch ich jetzt das zum laufen zu bringen. Erst wollte ich die DLL mit Profan aufrufen. Da es aber die Funktuonen Float() und Double() nicht gibt, hab ich es mal mit String$() versucht, bin aber auf die Nase gefallen. Dann hab ich mir gedacht, dass es eh sinnvoller wäre, auf die DLL mit C++ zuzugreifen. Okay, geschafft hab ich, das ich DLLs mithilfe von LoadLibrary zu laden und dann mit ... naja, schaut euch einfach den Code an : KompilierenMarkierenSeparieren In der DLL dll.dll ( ) ist lediglich eine Funktion, die funk heißt und einen Int-Parameter hat, und als Rückgabewert auch wieder diesen Parameter zurückgibt .
Laden kann ich die DLL, funktionnieren tuts anscheinend auch. Nur einen double oder float als Rückgabewert funktionniert nicht. ... ... also wieder das altbekannte Problem ... ajjj ... Naja, für heute langts mir ... hab ja schließlich heute schon ein 3 - stüniges Deutschaufsatzschreiben hinter mir ...
Wenns na nicht so kompliziert wäre ....
mfg Christian E |
|
|
| Debian Lenny, Intel Celeron 2,8 Ghz, 768 MB Ram && Win XP Pro, Intel C2D 1,66Ghz, 2 GB Ram ... PROFAN² 6.6 | 13.12.2007 ▲ |
|
|
|
|
Sebastian König | Ah, ich hatte übersehen, dass Du mit Profan² 6.6 arbeitest - da gibt es @Double(), @Single() und @Float() noch nicht... Für die ersten beiden findest Du Ersatz-Prozeduren in meinen alten DirectX-Codes - die sind allerdings etwas unbequem in der Handhabung
Bei dem anderen Problem wäre es hilfreich, wenn Du mal den Quellcode der Funktion funk posten könntest. Soll diese eine Fließkommazahl zurückgeben? Wenn ja, liegt der Fehler evtl. einfach in der Zeile
typedef int (*DLLFUNC)(int);
Diese definiert schließlich DLLFUNC als Zeiger auf eine Funktion, die einen int als Argument erwartet und auch einen int zurückgibt. Abgesehen davon fehlt auch das WINAPI bzw. __stdcall um die Aufrufkonvention anzugeben...
MfG
Sebastian |
|
|
| |
|
|
|
Christian Eichler | Ah, danke
Ich habs des jetzt soweit geschafft, dass es funktionniert, lag wirklich irgendwie an den nicht passenden ints
Danke soweit. Ergebniss wird gepostet, wenn verwertbar ...
mfg Christian E |
|
|
| Debian Lenny, Intel Celeron 2,8 Ghz, 768 MB Ram && Win XP Pro, Intel C2D 1,66Ghz, 2 GB Ram ... PROFAN² 6.6 | 13.12.2007 ▲ |
|
|
|