digitalmars.D - d and c++
- "Carlos Santander B." <carlos8294 msn.com> May 02 2004
- Robert Jones <robertjones21 HotPOP.com> Jul 13 2004
- "David Barrett" <dbarrett quinthar.com> Jul 13 2004
- Robert Jones <robertjones21 HotPOP.com> Jul 13 2004
- Thomas Kuehne <eisvogel users.sourceforge.net> Jul 13 2004
- Robert Jones <robertjones21 HotPOP.com> Jul 13 2004
- Thomas Kuehne <eisvogel users.sourceforge.net> Jul 13 2004
g++ seems to do a different name mangling than dmc, so this only works on
windows.
[file: test1.cpp]
#include <stdio.h>
void foo() { printf("Hi from C++\n"); }
[file: test2.d]
extern (C++) void foo();
void main() { foo(); }
dmc -c test1.cpp
dmd test2.d test1.obj
I guess it's good to have a shared backend.
-----------------------
Carlos Santander Bernal
May 02 2004
Carlos Santander B. wrote:g++ seems to do a different name mangling than dmc, so this only works on windows. [file: test1.cpp] #include <stdio.h> void foo() { printf("Hi from C++\n"); } [file: test2.d] extern (C++) void foo(); void main() { foo(); }dmc -c test1.cpp dmd test2.d test1.obj
I guess it's good to have a shared backend. ----------------------- Carlos Santander Bernal
Walter is aware of this. I rewrote test1.cpp to use iostream and it still worked. I will continue to play around with this undocumented feature. Since gdc uses the same backend as g++, perhaps it can be done on Unix as well. If that works and once I've discovered how much of C++ I can link my D projects with, I go back to that FOX toolkit port I shelved. Being able to link against C++ object should make it easier, rather than rewriting the whole dang thing in D(the reason it's been shelved). -- Robert Jones robertjones21 HotPOP.com
Jul 13 2004
"Robert Jones" <robertjones21 HotPOP.com> wrote in message news:cd0vg3$ik4$1 digitaldaemon.com...So there is some link compatibility with C++ on windows. Wonder if Walter is aware of this. I rewrote test1.cpp to use iostream and it still worked. I will continue to play around with this undocumented
This is just C++ functions, not C++ objects/methods, right? -david
Jul 13 2004
David Barrett wrote:"Robert Jones" <robertjones21 HotPOP.com> wrote in message news:cd0vg3$ik4$1 digitaldaemon.com...So there is some link compatibility with C++ on windows. Wonder if Walter is aware of this. I rewrote test1.cpp to use iostream and it still worked. I will continue to play around with this undocumented
feature. This is just C++ functions, not C++ objects/methods, right? -david
Jul 13 2004
This is just C++ functions, not C++ objects/methods, right?
As far as I can say C++ struct and functions work, but as soon as there is any class around - even if it's not accessed - thing screw up. system: linux / gcc 3.4. Thoas
Jul 13 2004
Thomas Kuehne wrote:This is just C++ functions, not C++ objects/methods, right?
As far as I can say C++ struct and functions work, but as soon as there is any class around - even if it's not accessed - thing screw up. system: linux / gcc 3.4.
Did you use gdc/gcc to run your test?Thoas
Jul 13 2004
Robert Jones wrote:This is just C++ functions, not C++ objects/methods, right?
As far as I can say C++ struct and functions work, but as soon as there is any class around - even if it's not accessed - thing screw up. system: linux / gcc 3.4.
Did you use gdc/gcc to run your test?
No, dmd 0.95 a primitive example is: (note that only "add" has C linkage but "multi" C++) ----a.cpp---- typedef struct MyStruct{ int i; char c; }; void multi(MyStruct* arg){ arg->i = arg->i * 3; } extern "C" { void add(MyStruct* arg); } void add(MyStruct* arg){ arg->c = arg->c+1; multi(arg); } ----b.d---- extern(C){ struct MyStruct{ int i; char c; } void add(MyStruct* ); } int main(){ MyStruct m; m.i=1; m.c='A'; printf("%i %c\n", m.i, m.c); add(&m); printf("%i %c\n", m.i, m.c); return 0; }
Jul 13 2004








Thomas Kuehne <eisvogel users.sourceforge.net>