Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

IDL en C++?

Pagina: 1
Acties:

  • prometheus345479
  • Registratie: Mei 2005
  • Laatst online: 12-10-2022
Hoi,

ik ben bezig met het aansturen van een camera in IDL. Ik heb van de fabrikant voorbeeld code gekregen in C++, die gebruikt kan worden om de camera aan te sturen.

Nu wil ik mijn hoofdprogramma schrijven in IDL (plaatje uitlezen, berekeningen doen, nieuw plaatje uitlezen) Omdat alles al in IDL geschreven is wil ik niet meet verhuizen naar C++ (omdat IDL zo veel makkelijker is).

Ik weet dat IDL C programma's kan aanroepen, en dat weer terug kan geven. En ik heb ook ontdekt dat het met C++ kan, maar ik kan nergens een soort van simpele intro vinden over hoe het werkt.

C is te gebruiken door het commando MAKE_DLL en daarna met CALL_EXTERNAL de gemaakte dll in te lezen en functies aan te roepen. Maar MAKE_DLL ondersteunt geen C++.

Zoals ik al zei weet ik dat het ook moet kunnen met C++, maar ik nergens simpele voorbeelden vinden, vanwaar ik het uit kan gaan breiden. Weet iemand hoe dit werkt met IDL?

(ik heb inmiddels een boek gevonden: "Calling C and C++ from IDL: Making Sense of the Sometimes Confusing World of C and IDL", maar dat duurt een paar weken voordat het uit de VS is, en dat duurt eigenlijk te lang. (het project is voor mijn stage)

Alvast bedankt!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 18:44
Hebben we het over deze IDL? IDL is geen programmeertaal, maar een manier om aan te geven hoe systemen onderling kunnen communiceren (interfacing).

Je moet je programma in een programmeertaal schrijven en IDL geeft aan hoe je met de camera kunt communiceren en als ik me niet vergis zijn er tools om C/ C++/ Java enz. code van de IDL code te genereren.

Werkt die camera toevallig met CORBA?

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


  • prometheus345479
  • Registratie: Mei 2005
  • Laatst online: 12-10-2022
Nee, het gaat om deze IDL.

Het is een taal veel gebruikt wordt bij beeldverwerking e.d.

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 25-10 14:28
Uit de external development guide (pdf):
C++
We are often asked if IDL can call C++ code. Compatibility with C has always been
a strong design goal for C++, and C++ is largely a superset of the C language. It
certainly is possible to combine IDL with C++ code. Callable IDL is especially
simple, as all you need to do is to include the idl_export.h header file in your C++
code and then call the necessary IDL functions directly. Calling C++ code from IDL
(CALL_EXTERNAL, System Routines) is also possible, but there are some issues
you should be aware of:
• As a C program, IDL is not able to directly call C++ methods, or use other
object-oriented features of the C++ language. To use these C++ features, you
must supply a function with C linkage (using an extern “C” specification) for
IDL to call. That routine, which is written in C++ is then able to use the C++
features.
• IDL does not initialize any necessary C++ runtime code. Your system may
require such code to be executed before your C++ code can run. Consult your
system documentation for details. (Please be aware that this information can be
difficult to find; locating it may require some detective work on your part.)

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 18:44
Hmm, daar zat ik zelf dus ook aan te denken (een C interface aanbieden voor C++ code) en dat blijkt dus de enige mogelijkheid te zijn om C++ code aan te roepen.

Wat wil je trouwens doen in het C++ programma?

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


  • prometheus345479
  • Registratie: Mei 2005
  • Laatst online: 12-10-2022
Ok, bedankt voor de reacties. Die PDF guide had ik nog niet gevonden. En er schijnt dus in de installatie map van IDL wat simpele voorbeelden te staan over hoe het werkt met C. Dit had ik zelf ook nog niet echt onder de knie.

En zoals ik al zei in de startpost is de voorbeeld programmatuur van de camera in C++. Daar zijn in een grote class alle functies gedefinieerd. (zoals open de driver, start de camera, maak een plaatje enz.)

Ik wil dus functies uit die class kunnen aanroepen, zodat ik gewoon de voorbeeld code simpel kan aanpassen, en zelf zo min mogelijk code hoef te schrijven. En ik dacht ook al aan iets om via C C++ aan te roepen, en zo dus IDL->C->C++->C->IDL te doen. Maar hoe kan ik vanuit C C++ aanroepen (ik heb hier nog niet op gezocht, maar als jullie daar toevallig over weten, dan zijn tips welkom ;-) )

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
C als tussenstap naar C++ is nooit nodig. C++ heeft extern "C" { } blokken, die er van buiten uitzien als C. In de definities mag je alle C++ gebruiken; zorg alleen dat de functiedeclaraties C blijven.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20:02
_js_ schreef op maandag 25 februari 2008 @ 14:47:
Uit de external development guide (pdf):
[...]
• IDL does not initialize any necessary C++ runtime code. Your system may
require such code to be executed before your C++ code can run.
Naar mijn ervaring wordt bij het laden van een DLL alles gewoon netjes geïnitialiseerd (iig voor zover ik kan zien, dus dingen als global constructors worden uitgevoerd). Het is wel mogelijk om een DLL te laden zonder dat die opstartcode uitgevoerd wordt, maar dat is meer bedoeld voor speciale situaties (als je bv. alleen maar resources of data uit de DLL wil halen) dus het lijkt niet dat dat hier het geval is.

Alles wijst er dus op dat je waarschijnlijk gewoon een DLL kunt schrijven in C++, zolang je de functies die je wil callen maar C linkage geeft. :)
Pagina: 1