[delphi]c++ naar delphi wijzigen

Pagina: 1
Acties:

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 14-05 03:35
Laatst heb ik bij mijn PDA het alturion software pakket gehad waar ook een hele leuke SDK bij zit.. Alleen deze SDK bestaat alleen maar uit C++ units, ik heb de trial van Borland C++ Builder gedownload om zo in de source te kijken hoe precies het programma aangeroepen wordt, maar ik kom er niet echt uit..

De documentatie is echt klein en ze beginnen direct hoe je in C de applicatie aanroept. Is er een mogelijkheid om C++ units in Delphi taal om te zetten?

  • charlie
  • Registratie: Oktober 2000
  • Laatst online: 07-03 11:08

charlie

?*?

Den niet dat je gecompileerde C++ units kan omzetten naar Delphi, maar je kan ze wel aanroepen vanuit Delphi...

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:49

Creepy

Tactical Espionage Splatterer

Megamind schreef op 02 augustus 2004 @ 07:51:
De documentatie is echt klein en ze beginnen direct hoe je in C de applicatie aanroept. Is er een mogelijkheid om C++ units in Delphi taal om te zetten?
Ligt eraan. Als het plain C is, dan is het goed mogelijk om om te zetten. Op het moment dat er C++ Classes gebruikt gaan worden dan vrees ik dat dat niet omgezet kan worden.

Nou is de gemiddelde SDK nog steeds C, dus ik gok erop dt je het prima kan omzetten. Een beetje C kennis is dan wel vereist ;) Er zijn ook manier om dat automatisch te doen, maar dat laat ik aan je google kunsten over :) (o.a. Delphi Quake2 heeft deels geautomatiseerd C / C++ code omgezet).

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 14-05 03:35
Hmm ik zie dat het een class is ja, en hij roept zo te zien een DLL aan want anders zou de code een beetje te kort zijn..

Ik zat zelf te prutsen met SendMessage, alleen heb je handlers nodig om te sturen en die kan ik weer nergens vandaan halen :|

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Als BCB het kan, kan Delphi het ook. Als je nu eens een specifieke vraag stelt kunnen we je misschien helpen.

We adore chaos because we like to restore order - M.C. Escher


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:49

Creepy

Tactical Espionage Splatterer

Megamind schreef op 02 augustus 2004 @ 09:04:
Hmm ik zie dat het een class is ja, en hij roept zo te zien een DLL aan want anders zou de code een beetje te kort zijn..

Ik zat zelf te prutsen met SendMessage, alleen heb je handlers nodig om te sturen en die kan ik weer nergens vandaan halen :|
Als je de source van die class hebt is er niks aan de hand. Dat kan je dus prima omzetten. En die DLL zal een "standaard C" library zijn en ook dat is prima vanuit Delphi te gebruiken.
Maaruh, die sources, zijn dat niet gewoon voorbeelden? En de de daadwerkelijke SDK bestaat dan uit DLL('s) en wat header files?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 14-05 03:35
Creepy schreef op 02 augustus 2004 @ 09:40:
[...]

Als je de source van die class hebt is er niks aan de hand. Dat kan je dus prima omzetten. En die DLL zal een "standaard C" library zijn en ook dat is prima vanuit Delphi te gebruiken.
Maaruh, die sources, zijn dat niet gewoon voorbeelden? En de de daadwerkelijke SDK bestaat dan uit DLL('s) en wat header files?
Er zitten losse samples bij, maar die zijn zo raar dat ik die niet eens aan de praat krijg.

Er zit een DLL bij ja, en een .h bestand. Het .h bestand werkt samen met die DLL (denk ik, kan het nergens terugvinden via borland c++), maar dan moet het nog omgezet worden naar delphi code...

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef _ALTURION_AIPC_
#define _ALTURION_AIPC_

#ifdef __cplusplus
extern "C" {
#endif

#ifdef AIPCDLL_EXPORTS
#define AIPCDLL_API __declspec(dllexport)
#else
#define AIPCDLL_API __declspec(dllimport)
#endif

AIPCDLL_API unsigned long AGPS5_ConnectAlturionGPS();

Hoe zou dit bv een delphi code worden?

[ Voor 13% gewijzigd door Megamind op 02-08-2004 17:34 ]


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 22-05 23:32

alienfruit

the alien you never expected

Om header files naar Delphi om te zetten gebruik ik altijd Robert's tool, je kan hem vinden op zijn web-site: http://www.drbob42.com/tools/index.htm. Veel plezier ermee.
Liever lui dan moe ;)

[ Voor 4% gewijzigd door alienfruit op 02-08-2004 17:37 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:49

Creepy

Tactical Espionage Splatterer

Megamind schreef op 02 augustus 2004 @ 17:33:
[...]

Er zitten losse samples bij, maar die zijn zo raar dat ik die niet eens aan de praat krijg.

Er zit een DLL bij ja, en een .h bestand. Het .h bestand werkt samen met die DLL (denk ik, kan het nergens terugvinden via borland c++), maar dan moet het nog omgezet worden naar delphi code...

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef _ALTURION_AIPC_
#define _ALTURION_AIPC_

#ifdef __cplusplus
extern "C" {
#endif

#ifdef AIPCDLL_EXPORTS
#define AIPCDLL_API __declspec(dllexport)
#else
#define AIPCDLL_API __declspec(dllimport)
#endif

AIPCDLL_API unsigned long AGPS5_ConnectAlturionGPS();

Hoe zou dit bv een delphi code worden?
De header file geeft de prototypes van de functies aan in de DLL. De header file zul je inderdaad moeten converteren naar Delphi.

In het voorbeeld van je zou dat iets worden als
Delphi:
1
function AGPS5_ConnectAlturionGPS(): longint; cdecl; extern 'blaat.dll';

Als je een beetje C kent is het omzetten niet zo moeilijk. Als je geen C kent en toch de API wilt gaan gebruiken dan kan dat best nog eens moeilijk worden, zelfs als je tools gebruikt om de boel automatisch te laten converteren. Zolang er geen pointers naar pointers gebruikt worden zul je redelijk safe zitten ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • BoomSmurf
  • Registratie: Maart 2003
  • Laatst online: 13-06-2025

BoomSmurf

Am-Ende!

Als je geen C kent moet je het nog proberen, als je het een keer of 10 gedaan hebt met wat uitzoekwerk kun je het daarna uit de losse pols :)

Verder kun je met classes ook wel wat, maar dat is echt priegelwerk.

[ Voor 21% gewijzigd door BoomSmurf op 03-08-2004 13:51 ]


Verwijderd

Je kan altijd op Project JEDI kijken of één of andere enthousiasteling de SDK misschien al vertaald heeft naar Delphi (maar er op rekenen zou ik niet).

Zoniet, dan zul je de headers met de hand naar Delphi moeten converteren. Je kan ook Dr. Bob's tool gebruiken, maar ik heb die een keer getest en echt geweldig werkte hij niet... kep d'r verder niet zoveel ervaring mee, dus een gefundeerd oordeel kan ik niet vellen. :>

  • MicroWhale
  • Registratie: Februari 2000
  • Laatst online: 11-05 08:00

MicroWhale

The problem is choice

Als het een te registreren DLL is dan moet je de procedure calls van de dll importeren in delphi om de dll in je programma te kunnen gebruiken, meer niet.

Dit heet een Type Library.

Met "Project|Import Type Library..." kun je de calls en types alle geregistreerde DLL's opvragen. Eenmaal aanwezig als _TLB unit kun je deze dll-calls gewoon aanroepen in je programma.


ps. Als de naam van die dll (sdk, etc.) van jou er niet tussenstaat kun je proberen om hem zelf te registreren. Dit gaat met regsvr32:
(c:\windows\system\)x:\pad\regsvr32 x:\pad\dllnaam.dll

en daarna te kijken of hij er tussenstaat om de TLB te importeren.

[ Voor 28% gewijzigd door MicroWhale op 03-08-2004 14:43 ]

Het enige belangrijke is dat je vandaag altijd rijker bent dan gisteren. Als dat niet in centen is, dan wel in ervaring.


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:49

Creepy

Tactical Espionage Splatterer

Logos schreef op 03 augustus 2004 @ 14:40:
Als het een te registreren DLL is dan moet je de procedure calls van de dll importeren in delphi om de dll in je programma te kunnen gebruiken, meer niet.

Dit heet een Type Library.

Met "Project|Import Type Library..." kun je de calls en types alle geregistreerde DLL's opvragen. Eenmaal aanwezig als _TLB unit kun je deze dll-calls gewoon aanroepen in je programma.


ps. Als de naam van die dll (sdk, etc.) van jou er niet tussenstaat kun je proberen om hem zelf te registreren. Dit gaat met regsvr32:
(c:\windows\system\)x:\pad\regsvr32 x:\pad\dllnaam.dll

en daarna te kijken of hij er tussenstaat om de TLB te importeren.
Aan het stukje uit de header file te zien is het een plain C DLL. En geen COM dll. Het importeren en gebruik van de typelib kan de TS wel vergeten :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 14-05 03:35
Ik heb die tool gebruikt, maar wat hij daar uit gooit is nog grotere larie als de orginele source :P Ik ben nu nog een beetje aan het romellen met DLL files in delphi hoe die werken maar kan niet echt goeie ervaringen vinden (tuts).

Als ik nou gewoon functie heb zoals Creepy, dan krijg ik access violation errors..

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Rommellen en ervaringen zoeken zal je niet veel verder helpen. Als je al weinig van C snapt en ook niet veel van Delphi is dit echt ver je pet te boven. Misschien kan je wat makkelijkers zoeken?

We adore chaos because we like to restore order - M.C. Escher


  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 14-05 03:35
LordLarry schreef op 03 augustus 2004 @ 19:05:
Rommellen en ervaringen zoeken zal je niet veel verder helpen. Als je al weinig van C snapt en ook niet veel van Delphi is dit echt ver je pet te boven. Misschien kan je wat makkelijkers zoeken?
Ik snap wel wat van delphi, maar niet van dll's. En ik ga misschien infomap navigator gebruiken dan omdat daar een activex component bij zit, dat zal wel eenvoudiger zijn..
Pagina: 1