D - C/C++ wrapping D
- Mark Evans (4/4) Sep 17 2002 D has easy ways to call C/C++, but is the other direction as easy?
- Toyotomi (12/16) Sep 18 2002 I'd just like to point out that calling C from D is as easy as calling C
- Mac Reiter (15/33) Sep 18 2002 I realize the original question related to C calling D, but Toyotomi's r...
- Walter (11/14) Sep 18 2002 or
- Mark Evans (1/9) Sep 18 2002
D has easy ways to call C/C++, but is the other direction as easy? What if I want C/C++ to form the outer shell of my app (housing WinMain() or equivalent) with D as an internal component? Mark
Sep 17 2002
On Wed, 18 Sep 2002 06:57:02 +0000 (UTC), Mark Evans <Mark_member pathlink.com> wrote:D has easy ways to call C/C++, but is the other direction as easy? What if I want C/C++ to form the outer shell of my app (housing WinMain() or equivalent) with D as an internal component? MarkI'd just like to point out that calling C from D is as easy as calling C from Delphi... I mention this because, like Delphi, it means that the C and C++ headers must be converted. Once someone does the conversion (and continually updates it as needed), yes it's certainly easy. Some libraries are going to be insane to convert and keep updated. I've seen the same thing with Delphi, and it has led me to disregard Delphi for some projects completely... Perhaps the first D community project should be a program to help with these conversions, however convoluted and difficult. Every hour spent on such a project could certainly save many more...
Sep 18 2002
I realize the original question related to C calling D, but Toyotomi's response is discussing D calling C, and the need for an automated system for converting C headers to D importable modules. It has already been mentioned on the newsgroup, but has anyone looked into making a SWIG module to do this? I know they have them for Python and various other languages. I ran across it looking for a way to easily import C stuff into Eiffel, but the SWIG modules for that were pretty flakey and I wasn't real excited about getting into it all that deeply. Since D has many common concepts with C (at least at the function interface level), the SWIG module for this shouldn't be too horrible to develop. Anyone with more experience care to comment? (Sorry for highjacking the original question (C calling D), which I am also interested in.) Mac In article <9kpgouc8iof5qd6t87jh4peqa82b40ph27 4ax.com>, Toyotomi says...On Wed, 18 Sep 2002 06:57:02 +0000 (UTC), Mark Evans <Mark_member pathlink.com> wrote:D has easy ways to call C/C++, but is the other direction as easy? What if I want C/C++ to form the outer shell of my app (housing WinMain() or equivalent) with D as an internal component? MarkI'd just like to point out that calling C from D is as easy as calling C from Delphi... I mention this because, like Delphi, it means that the C and C++ headers must be converted. Once someone does the conversion (and continually updates it as needed), yes it's certainly easy. Some libraries are going to be insane to convert and keep updated. I've seen the same thing with Delphi, and it has led me to disregard Delphi for some projects completely... Perhaps the first D community project should be a program to help with these conversions, however convoluted and difficult. Every hour spent on such a project could certainly save many more...
Sep 18 2002
"Mark Evans" <Mark_member pathlink.com> wrote in message news:am983u$108o$1 digitaldaemon.com...D has easy ways to call C/C++, but is the other direction as easy? What if I want C/C++ to form the outer shell of my app (housing WinMain()orequivalent) with D as an internal component?It's pretty straightforward, just declare the exported D functions with: extern (C) { ... functions ... } and then call them from your C/C++ code as if they were C functions. The main issue will be just to ensure that the D startup code (in phobos\dmain.d) gets called before any D functions.
Sep 18 2002
Ah yes; Walter, you are a gift to mankind. <g>It's pretty straightforward, just declare the exported D functions with: extern (C) { ... functions ... } and then call them from your C/C++ code as if they were C functions. The main issue will be just to ensure that the D startup code (in phobos\dmain.d) gets called before any D functions.
Sep 18 2002