www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Can't get D calling C to build.

reply Bob Cowdery <bob bobcowdery.plus.com> writes:
 Hi

Just trying to get started and need a little advice. First up was
selecting an IDE, tried a few and settled on Code::Blocks. I need
Windows and Linux and also C and D supported in the same IDE. The
support does not seem to be finished in Code::Blocks though, does it
really not have syntax highlighting for D or did I miss something.

Anyhow it works well enough for now. First task was to build a test of D
calling C. Made the simplest possible C static library, one method
returns a string. Made the simplest possible D app which calls the C
method and prints the result. I built the C part and then referenced it
as a library in the D build. The D build goes with no errors and says it
has written the output file... but it doesn't, there is  no output file.

It says:
Linking console executable: bin\Release\DTest.exe

Now I've tried this with just D code and it writes the output and runs
so I know something works. Does anyone know where to look, is it
Code::Blocks, compiler, stupidity (probably).

Regards
Bob
Aug 19 2010
next sibling parent reply Kagamin <spam here.lot> writes:
Bob Cowdery Wrote:

 Now I've tried this with just D code and it writes the output and runs
 so I know something works. Does anyone know where to look, is it
 Code::Blocks, compiler, stupidity (probably).
On windows dmd uses ancient OMF object format, but gcc compiles to COFF.
Aug 19 2010
next sibling parent Bob Cowdery <bob bobcowdery.plus.com> writes:
 On 20/08/2010 06:51, Kagamin wrote:
 Bob Cowdery Wrote:

 Now I've tried this with just D code and it writes the output and runs
 so I know something works. Does anyone know where to look, is it
 Code::Blocks, compiler, stupidity (probably).
On windows dmd uses ancient OMF object format, but gcc compiles to COFF.
Thanks for the hint. I found an object file converter and converted the C obj file to OMF and it now builds. It seems very odd to me to have to jump through this loop. This should be up in big red letters on the D site somewhere. bob
Aug 20 2010
prev sibling parent Bob Cowdery <bob bobcowdery.plus.com> writes:
 A bit more playing and I see that it's assumed that C code is compiled
with dmc and then the  D code can be compiled with dmd which will also
link in the obj left by dmc. It wasn't clear at all that to make things
work easily one needs to use both the C and D Digital Mars compilers.

Code::Blocks has led me a right old game by adding in switches the
compiler doesn't understand. Eventually got it configured to use the dmc
and dmd toolchains and managed to build and link in a C library. Some
progress at last.

bob

On 20/08/2010 09:54, Bob Cowdery wrote:
  On 20/08/2010 06:51, Kagamin wrote:
 Bob Cowdery Wrote:

 Now I've tried this with just D code and it writes the output and runs
 so I know something works. Does anyone know where to look, is it
 Code::Blocks, compiler, stupidity (probably).
On windows dmd uses ancient OMF object format, but gcc compiles to COFF.
Thanks for the hint. I found an object file converter and converted the C obj file to OMF and it now builds. It seems very odd to me to have to jump through this loop. This should be up in big red letters on the D site somewhere. bob
Aug 20 2010
prev sibling parent reply Bob Cowdery <bob bobcowdery.plus.com> writes:
 Thanks for the replies. I've bounced off D a few times because it
didn't seem ready to risk a whole development. I should have mentioned
I'm trying this on Windows 7. I did suspect object formats were
incompatible but as you say would have expected a decent error message.
I also tried from the command line with the same problem, it just
generates an empty map file and nothing else. I also tried using gdc,
now surely the output of gcc and gdc must be compatible. However, it
didn't work and it doesn't look like gdc is being actively developed.

I'm still concerned it's a bit too soon as a lot of things seem to be
either Windows or Linux (cmake says its only tested for *nix) but not
both and there is very little guidance on building. I really want to get
this working on Windows first. As D makes so much of its binary
compatibility with C I find it odd that there is no information on how
to build mixed systems just on how to code the calls.

dmc gives me this error:
OPTLINK : Error 118: Filename Expected
LIB="C:\D2.0\dm\bin\..\lib";"C:\D2.0\dm\bin\..\mfc\lib";C:\Program
Files\Gtk+\lib

The paths are correct as far as I can tell.

Sorry, didn't mean that to sound like a rant, just not sure where to go
from here. Anybody got a definitive answer as to what works on Windows.

bob


Jonathan M Davis said
My first question would be whether you used the same linker for both D and C.
On 
Linux, they should both be using gcc. On Windows, they should both be using
dmc. 
Still, I would have expected a linking error to be a bit more explosive than 
nothing.
steve said
My experience has been the opposite - dmd is needed to link programs
that mix C and D.  While you may not want to jump into CMake for
builds, the regression tests for cmaked include building and link D+C
objects and D + C libraries.
http://code.google.com/p/cmaked2/wiki/GettingStarted
FYI, cmaked is still work in progress, so you might run into bumps.
-steve
Kagamin said
On windows dmd uses ancient OMF object format, but gcc compiles to COFF.
Aug 20 2010
parent reply div0 <div0 sourceforge.net> writes:
On 20/08/2010 09:17, Bob Cowdery wrote:
 I'm still concerned it's a bit too soon as a lot of things seem to be
 either Windows or Linux (cmake says its only tested for *nix) but not
 both and there is very little guidance on building. I really want to get
 this working on Windows first. As D makes so much of its binary
 compatibility with C I find it odd that there is no information on how
 to build mixed systems just on how to code the calls.
C compatibly is fine as long as you either build with dmc or convert the VC c libs to dmc's format. The conversion tool is only available as part of the paid tool set off of digital mars I think; though possibly there's a free one around. Try searching the learn archive it's been discussed before. Personnaly I just compile stuff with dmc and it all works great as long as you get the extern c declarations right.
 dmc gives me this error:
 OPTLINK : Error 118: Filename Expected
 LIB="C:\D2.0\dm\bin\..\lib";"C:\D2.0\dm\bin\..\mfc\lib";C:\Program
 Files\Gtk+\lib

 The paths are correct as far as I can tell.
Optlink hates spaces in paths. It will also barf if you have spaces in any of the directories in the PATH environment var as well; you should setup an explicit PATH when running DMD. If you really need stuff with spaces in the name, you can use junction to create symlinks on 'doze and put the sym links in your path instead: http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx -- My enormous talent is exceeded only by my outrageous laziness. http://www.ssTk.co.uk
Aug 20 2010
parent reply Bob Cowdery <bob bobcowdery.plus.com> writes:
 On 20/08/2010 18:44, div0 wrote:
 On 20/08/2010 09:17, Bob Cowdery wrote:
 I'm still concerned it's a bit too soon as a lot of things seem to be
 either Windows or Linux (cmake says its only tested for *nix) but not
 both and there is very little guidance on building. I really want to get
 this working on Windows first. As D makes so much of its binary
 compatibility with C I find it odd that there is no information on how
 to build mixed systems just on how to code the calls.
C compatibly is fine as long as you either build with dmc or convert the VC c libs to dmc's format. The conversion tool is only available as part of the paid tool set off of digital mars I think; though possibly there's a free one around. Try searching the learn archive it's been discussed before. Personnaly I just compile stuff with dmc and it all works great as long as you get the extern c declarations right.
I have compiled all my stuff now with dmc. It has some differences from gcc which caused me some issues. I then went to link up my program with a D front end and realised that I use many 3rd party libraries which will all need to be converted. This doesn't seem like such a great idea any more. Why does a modern language use an old object format I wonder. For me at least I'm wondering if it stacks up. Linux support seems secondary (correct me if I'm wrong). The only painless way to use C libraries is as dll's and even then the import library must be converted for which the tool in not free. The language itself is nice but the hassle factor for mixed language multi-platform seems quite high. I hope I'm wrong on both counts.
 dmc gives me this error:
 OPTLINK : Error 118: Filename Expected
 LIB="C:\D2.0\dm\bin\..\lib";"C:\D2.0\dm\bin\..\mfc\lib";C:\Program
 Files\Gtk+\lib

 The paths are correct as far as I can tell.
Optlink hates spaces in paths. It will also barf if you have spaces in any of the directories in the PATH environment var as well; you should setup an explicit PATH when running DMD. If you really need stuff with spaces in the name, you can use junction to create symlinks on 'doze and put the sym links in your path instead: http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx
Aug 21 2010
next sibling parent bearophile <bearophileHUGS lycos.com> writes:
Bob Cowdery:
 Why does a modern language use an old object format I wonder.
This problem will need to be addressed (among others).
 The language itself is nice but the
 hassle factor for mixed language multi-platform seems quite high. I hope
 I'm wrong on both counts.
Despite being in the works for about ten years, D language is young, and the manpower working on its tools and back-end is quite limited, so such problems get solved slowly. In theory help from external people may help the situation, but it's not an easy job (are you able to change dmd object format?). Languages as Scala become usable in less time because they are based on an already existing virtual machine with good GC, a std lib, tons of tools, etc. D is both an ambitious language (C++ class performance with a better design) and is not much based on existing 'platforms'. So progress is slow. On the other hand Walter has shown to be determined and able to go on and on, so I have hope that many problems will be addressed :-) Bye, bearophile
Aug 21 2010
prev sibling next sibling parent reply Johannes Pfau <spam example.com> writes:
On 21.08.2010 23:07, Bob Cowdery wrote:
 
 For me at least I'm wondering if it stacks up. Linux support seems
 secondary (correct me if I'm wrong). The only painless way to use C
 libraries is as dll's and even then the import library must be converted
 for which the tool in not free.
I had the same problem some time ago, and in some old newsgroup post I found this link: ftp://ftp.digitalmars.com/coffimplib.zip It still works. So I think it's free to use by the D community, but I could be totally wrong. Only Walter can answer that. -- Johannes Pfau
Aug 21 2010
parent reply Bob Cowdery <bob bobcowdery.plus.com> writes:
 On 21/08/2010 22:41, Johannes Pfau wrote:
 On 21.08.2010 23:07, Bob Cowdery wrote:
 For me at least I'm wondering if it stacks up. Linux support seems
 secondary (correct me if I'm wrong). The only painless way to use C
 libraries is as dll's and even then the import library must be converted
 for which the tool in not free.
I had the same problem some time ago, and in some old newsgroup post I found this link: ftp://ftp.digitalmars.com/coffimplib.zip It still works. So I think it's free to use by the D community, but I could be totally wrong. Only Walter can answer that.
Well, the link still works but the download is 0 bytes so I guess its not available. Thanks for the thought.
Aug 22 2010
parent reply bearophile <bearophileHUGS lycos.com> writes:
Bob Cowdery:
 Well, the link still works but the download is 0 bytes so I guess its
 not available. Thanks for the thought.
That links works for me :-) Be happy, bye, bearophile
Aug 22 2010
next sibling parent Bob Cowdery <bob bobcowdery.plus.com> writes:
 On 22/08/2010 20:57, bearophile wrote:
 Bob Cowdery:
 Well, the link still works but the download is 0 bytes so I guess its
 not available. Thanks for the thought.
That links works for me :-) Be happy, bye, bearophile
Works if I paste it but not straight from the email,odd.
Aug 22 2010
prev sibling next sibling parent Bob Cowdery <bob bobcowdery.plus.com> writes:
 On 22/08/2010 22:16, Bob Cowdery wrote:
  On 22/08/2010 20:57, bearophile wrote:
 Bob Cowdery:
 Well, the link still works but the download is 0 bytes so I guess its
 not available. Thanks for the thought.
That links works for me :-) Be happy, bye, bearophile
Works if I paste it but not straight from the email,odd.
Does the tool work for you. If I just build the default GCC DLL and then try to convert the import library it says it's not an import library. bob
Aug 23 2010
prev sibling parent reply Bob Cowdery <bob bobcowdery.plus.com> writes:
 On 23/08/2010 20:24, Bob Cowdery wrote:
  On 22/08/2010 22:16, Bob Cowdery wrote:
  On 22/08/2010 20:57, bearophile wrote:
 Bob Cowdery:
 Well, the link still works but the download is 0 bytes so I guess its
 not available. Thanks for the thought.
That links works for me :-) Be happy, bye, bearophile
Works if I paste it but not straight from the email,odd.
Does the tool work for you. If I just build the default GCC DLL and then try to convert the import library it says it's not an import library. bob
Addendum: The plot thickens. If I build a dll with my VC++ Express 2010 then I can convert the import library and it actually works from D. However if I build with MinGW GCC it doesn't even recognise the library even though it is COFF format. My preferred route unfortunately is GCC. I just got 'The D Programming Language' book and that devotes a whole half page to this very important topic. This seems to be rather a minefield and so far there only seems to be one route through it. bob
Aug 23 2010
next sibling parent reply Andrej Mitrovic <andrej.mitrovich gmail.com> writes:
I haven't read the specifics of your problem yet,  but have you tried using the
newer TDM port of MinGW? The MinGW binaries are still using an older port of
GCC, but the TDM version is much newer, so it might be worth trying it out.

Get it from here:  http://tdm-gcc.tdragon.net/

Hope that helps.

Bob Cowdery Wrote:

  On 23/08/2010 20:24, Bob Cowdery wrote:
  On 22/08/2010 22:16, Bob Cowdery wrote:
  On 22/08/2010 20:57, bearophile wrote:
 Bob Cowdery:
 Well, the link still works but the download is 0 bytes so I guess its
 not available. Thanks for the thought.
That links works for me :-) Be happy, bye, bearophile
Works if I paste it but not straight from the email,odd.
Does the tool work for you. If I just build the default GCC DLL and then try to convert the import library it says it's not an import library. bob
Addendum: The plot thickens. If I build a dll with my VC++ Express 2010 then I can convert the import library and it actually works from D. However if I build with MinGW GCC it doesn't even recognise the library even though it is COFF format. My preferred route unfortunately is GCC. I just got 'The D Programming Language' book and that devotes a whole half page to this very important topic. This seems to be rather a minefield and so far there only seems to be one route through it. bob
Aug 23 2010
parent reply bearophile <bearophileHUGS lycos.com> writes:
Andrej Mitrovic:

 I haven't read the specifics of your problem yet,  but have you tried using
the newer TDM port of MinGW? The MinGW binaries are still using an older port
of GCC, but the TDM version is much newer, so it might be worth trying it out.
 Get it from here:  http://tdm-gcc.tdragon.net/
 Hope that helps.
I like this, and I love the way you install it, this is the way a compiler has to be installed: http://nuwen.net/mingw.html Bye, bearophile
Aug 23 2010
next sibling parent bearophile <bearophileHUGS lycos.com> writes:
 I like this, and I love the way you install it, this is the way a compiler has
to be installed:
 http://nuwen.net/mingw.html
Uhm... The last version (6.6 that is gcc 4.5.1) seems to produce very large binaries, and the precedent version seems not available. Not good for you. Bye and sorry, bearophile
Aug 23 2010
prev sibling next sibling parent Bob Cowdery <bob bobcowdery.plus.com> writes:
 On 23/08/2010 23:04, bearophile wrote:
 Andrej Mitrovic:

 I haven't read the specifics of your problem yet,  but have you tried using
the newer TDM port of MinGW? The MinGW binaries are still using an older port
of GCC, but the TDM version is much newer, so it might be worth trying it out.
 Get it from here:  http://tdm-gcc.tdragon.net/
 Hope that helps.
I like this, and I love the way you install it, this is the way a compiler has to be installed: http://nuwen.net/mingw.html Bye, bearophile
Thanks for the suggestions. I wound back a bit and looked at the 3rd party libraries I was using and what do you know, they were all dll's with import libs. I don't know what compiler some were built with but they all converted with the coffimplib tool. So I rebuilt all my stuff with dmc and after a bit of faffing around with link errors I got the whole thing to build with a D front end that just makes a top level call to initialise everything. It correctly reported it couldn't open a usb device so it looks like it made its way down through several libraries to the hardware without choking. I might be on my way :-) . bob
Aug 24 2010
prev sibling next sibling parent reply Philippe Sigaud <philippe.sigaud gmail.com> writes:
On Tue, Aug 24, 2010 at 15:24, Bob Cowdery <bob bobcowdery.plus.com> wrote:

 I might be on my way :-) .

 Good :) I just skimmed through the thread, so I don't know if you're still
using Code::Blocks. I'm using it, and it highlights D code with no problem. For 10.05, it's in Settings > Editor > Syntax Highlighting > syntax highlighting for D (default color scheme) The keyword list might need to be updated a bit, maybe. I don't know if the original install has 'immutable' as a keyword, for example. Philippe
Aug 26 2010
parent Andrej Mitrovic <andrej.mitrovich gmail.com> writes:
CB uses the Scintilla editing component, which is the one used by Scite (which
I'm using atm). Scite was missing quite a bit of keywords, so I've added some
of them.

I just did a comparison, and it seems they're both missing a bunch of keywords.
A fun thing to do is open CB and Scite side-by-side, and paste all the keywords
from both and see which ones are highlighted.

I've fused the two together and removed duplicates (I also have string
highlighted which you might want to remove). So the list goes:

 property abstract alias align asm assert auto body bool break byte case cast
catch cdouble cent cfloat char class const continue creal dchar dstring debug
default delegate delete deprecated do double else enum export extern false
final finally float for foreach foreach_reverse function goto idouble if ifloat
immutable import in inout int interface invariant ireal is lazy long macro
mixin module new nothrow null out override package pragma private protected
public pure real ref return scope shared short size_t static string struct
super switch synchronized template this throw true try typedef typeid typeof
ubyte ucent uint ulong union unittest ushort version void volatile wchar
wstring while with __FILE__ __LINE__ __gshared __thread __traits const_cast
dynamic_cast explicit friend inline mutable namespace operator register
reinterpret_cast restrict signed sizeof static_cast typename unsigned using
virtual int8_t uint8_t int16_t uint16_t int32_t uint32_t int64_t uint64_t
int_least8_t uint_least8_t int_least16_t uint_least16_t int_least32_t
uint_least32_t int_least64_t uint_least64_t int_fast8_t uint_fast8_t
int_fast16_t uint_fast16_t int_fast32_t uint_fast32_t int_fast64_t
uint_fast64_t intptr_t uintptr_t intmax_t uintmax_t wint_t wchar_t wctrans_t
wctype_t time_t and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq
complex imaginary _Complex _Imaginary _Bool _Pragma


Philippe Sigaud Wrote:

 using Code::Blocks.
 I'm using it, and it highlights D code with no problem. For 10.05, it's in
 Settings > Editor > Syntax Highlighting > syntax highlighting for D (default
 color scheme)
 The keyword list might need to be updated a bit, maybe. I don't know if the
 original install has 'immutable' as a keyword, for example.
 
 Philippe
Aug 26 2010
prev sibling parent reply Bob Cowdery <bob bobcowdery.plus.com> writes:
 On 26/08/2010 21:43, Philippe Sigaud wrote:
 On Tue, Aug 24, 2010 at 15:24, Bob Cowdery <bob bobcowdery.plus.com
 <mailto:bob bobcowdery.plus.com>> wrote:

     I might be on my way :-) .

 Good :) I just skimmed through the thread, so I don't know if you're
 still using Code::Blocks.
 I'm using it, and it highlights D code with no problem. For 10.05,
 it's in Settings > Editor > Syntax Highlighting > syntax highlighting
 for D (default color scheme)
 The keyword list might need to be updated a bit, maybe. I don't know
 if the original install has 'immutable' as a keyword, for example.

 Philippe
Hi Philippe I'm running 10.05 but when I go to Syntax highlighting there is no 'D' in the dropdown. I have C/C++, Squirrel, Windows Resource, XML. To get some highlighting I just set the mask for C/C++ to include *.d. On the code completion plugin it says only C/C++ is supported. What am I missing? Thanks Bob
Aug 27 2010
next sibling parent Andrej Mitrovic <andrej.mitrovich test.com> writes:
CB doesn't officially have support for D (I don't see it in code completion
either), afaik. But it does have syntax highlighting for it. I have about 30 or
so different languages selectable in the highlighter, I think these came by
default.

Bob Cowdery Wrote:

  On 26/08/2010 21:43, Philippe Sigaud wrote:
 On Tue, Aug 24, 2010 at 15:24, Bob Cowdery <bob bobcowdery.plus.com
 <mailto:bob bobcowdery.plus.com>> wrote:

     I might be on my way :-) .

 Good :) I just skimmed through the thread, so I don't know if you're
 still using Code::Blocks.
 I'm using it, and it highlights D code with no problem. For 10.05,
 it's in Settings > Editor > Syntax Highlighting > syntax highlighting
 for D (default color scheme)
 The keyword list might need to be updated a bit, maybe. I don't know
 if the original install has 'immutable' as a keyword, for example.

 Philippe
Hi Philippe I'm running 10.05 but when I go to Syntax highlighting there is no 'D' in the dropdown. I have C/C++, Squirrel, Windows Resource, XML. To get some highlighting I just set the mask for C/C++ to include *.d. On the code completion plugin it says only C/C++ is supported. What am I missing? Thanks Bob <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"> <title></title> </head> <body bgcolor="#ffffff" text="#000000"> On 26/08/2010 21:43, Philippe Sigaud wrote: <blockquote cite="mid:AANLkTimj4AUp=MB-fVEFqsmsiK6DvsMMDXST8-FvfNHr mail.gmail.com" type="cite"><br> <br> <div class="gmail_quote">On Tue, Aug 24, 2010 at 15:24, Bob Cowdery <span dir="ltr">&lt;<a moz-do-not-send="true" href="mailto:bob bobcowdery.plus.com">bob bobcowdery.plus.com</a>&gt;</span> wrote:<br> <blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"> <div>I might be on my way :-) .<br> </div> <br> </blockquote> <div>Good :) I just skimmed through the thread, so I don't know if you're still using Code::Blocks.<br> I'm using it, and it highlights D code with no problem. For 10.05, it's in Settings &gt; Editor &gt; Syntax Highlighting &gt; syntax highlighting for D (default color scheme)<br> The keyword list might need to be updated a bit, maybe. I don't know if the original install has 'immutable' as a keyword, for example.<br> <br> Philippe<br> <br> </div> </div> </blockquote> Hi Philippe<br> <br> I'm running 10.05 but when I go to Syntax highlighting there is no 'D' in the dropdown. I have C/C++, Squirrel, Windows Resource, XML. To get some highlighting I just set the mask for C/C++ to include *.d. On the code completion plugin it says only C/C++ is supported. What am I missing?<br> <br> Thanks<br> Bob<br> </body> </html>
Aug 27 2010
prev sibling parent Philippe Sigaud <philippe.sigaud gmail.com> writes:
On Fri, Aug 27, 2010 at 11:08, Bob Cowdery <bob bobcowdery.plus.com>  wrote:

***
    I'm running 10.05 but when I go to Syntax highlighting there is no 'D' in
the
dropdown. I have C/C++, Squirrel, Windows Resource, XML. To get some
highlighting
I just set the mask for C/C++ to include *.d. On the code completion plugin it
says only C/C++ is supported. What am I missing?
***

? I have *dozens* of languages in this dropdown.
I've been using C::B for D since 2007-2008. Maybe they added files back then,
and
when I regularly updated with svn versions these were not modifed, whereas they
are not part of the 10.05 distrib?

Anyway, I attached a zip file to this message with the D-related files I could
find. It's the first time I do this on this NG, we'll see if that works.

Put the two lexer* files in CodeBlocks/share/CodeBlocks/lexer
Put the entire 'd' directory in CodeBlocks/share/CodeBlocks/templates/wizard

This directory are the instructions to create a new D (console) application when
you create a new project. I have no D (Windows/GUI) wizard, but the structure is
easy to understand. I'm pretty sure someone proficient enough can create the
correct wizard for GUI applications.

Philippe
begin 644 d.zip
M4$L#!`H``````"JA&ST````````````````"````9"]02P,$" ``````*J$;
M/0````````````````H```!D+V-O;G-O;&4O4$L#!`H``````%"(+S<\L'^D
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
M8ND#<UG9OIQQ>!TVSVJ!R>2WQZ>'R81,)D^/W\J+K/0"KI!JW)HZ^5S^-I.5
MC`G*1D>VEGI5ZET)XM,5E&,-Y"SGLI;<*0WG=6W8EB(*7S+W$DDJ#>5;9')F
M_)W=>E/WCXFKGU4K+^_YQ-RP!S7;%^4-.RJK5.-S\T1E5B#JOE L:5I `YQ0
M^_,$E.I4,^Z=G_<.2SU;6)E7<L^6:B?\Z37"#Q)E^E,7[JU:-4')2=&O')#D
M%8)>-^E4?H>"^LRDX:Z9;GJ)VT__9H_KF_/C_P;X!U!+`0(4``H``````"JA
M&ST````````````````"````````````$`````````!D+U!+`0(4``H`````
M`"JA&ST````````````````*````````````$````"````!D+V-O;G-O;&4O
M4$L!`A0`" ``````4( O-SRP?Z0X"```.` ```H```````````` ````2```
M`&0O;&]G;RYP;F=02P$"%``4````"`!0B"\W54\ZQ/<S````-0``#```````
M`````"````"H"```9"]W:7IA<F0N<&YG4$L!`A0`%````` `4( O-Z70E3;!
M` ``UP<```\```````````` ````R3P``&0O=VEZ87)D+G-C<FEP=%!+`0(4
M`!0````(`+*683PU_AP,> ```-(````0````````````(````+<_``!D+V-O
M;G-O;&4O;6%I;BYD4$L!`A0`" ``````B6F).$;]QUXZ````. ```"``````
M``````` ````7T```$%R8VAI=F4 8W)E871E9"!B>2!F<F5E(&I::7`N=7)L
M4$L!`A0`%````` `*8 O-_JQDB5J`0``M0(```X```````````` ````UT``
M`&QE>&5R7V0N<V%M<&QE4$L!`A0`%````` `<*T;/6N+VE+G!```91````L`
M``````````` ````;4(``&QE>&5R7V0N>&UL4$L%! `````)``D`&`(``'U'
$````````
`
end
Aug 27 2010
prev sibling parent torhu <no spam.invalid> writes:
On 23.08.2010 23:24, Bob Cowdery wrote:
 Addendum: The plot thickens. If I build a dll with my VC++ Express 2010
 then I can convert the import library and it actually works from D.
 However if I build with MinGW GCC it doesn't even recognise the library
 even though it is COFF format. My preferred route unfortunately is GCC.
 I just got 'The D Programming Language' book and that devotes a whole
 half page to this very important topic. This seems to be rather a
 minefield and so far there only seems to be one route through it.
If you've got a DLL, you can usually generate an import library directly from that using the implib tool, download link below. ftp://ftp.digitalmars.com/bup.zip This obviously fails for DLLs that only export by ordinal, but those are not that common. You need to use the /s switch to get correct name mangling.
Aug 26 2010
prev sibling parent reply div0 <div0 sourceforge.net> writes:
On 21/08/2010 22:07, Bob Cowdery wrote:
   On 20/08/2010 18:44, div0 wrote:
 On 20/08/2010 09:17, Bob Cowdery wrote:
 I'm still concerned it's a bit too soon as a lot of things seem to be
 either Windows or Linux (cmake says its only tested for *nix) but not
 both and there is very little guidance on building. I really want to get
 this working on Windows first. As D makes so much of its binary
 compatibility with C I find it odd that there is no information on how
 to build mixed systems just on how to code the calls.
C compatibly is fine as long as you either build with dmc or convert the VC c libs to dmc's format. The conversion tool is only available as part of the paid tool set off of digital mars I think; though possibly there's a free one around. Try searching the learn archive it's been discussed before. Personnaly I just compile stuff with dmc and it all works great as long as you get the extern c declarations right.
I have compiled all my stuff now with dmc. It has some differences from gcc which caused me some issues. I then went to link up my program with a D front end and realised that I use many 3rd party libraries which will all need to be converted. This doesn't seem like such a great idea any more. Why does a modern language use an old object format I wonder. For me at least I'm wondering if it stacks up. Linux support seems secondary (correct me if I'm wrong). The only painless way to use C libraries is as dll's and even then the import library must be converted for which the tool in not free. The language itself is nice but the hassle factor for mixed language multi-platform seems quite high. I hope I'm wrong on both counts.
Well that's true; D still isn't really ready for production use, unless you have time or money to burn to do a lot of it yourself. I love D, but I only use it for my own small hobby projects. Mr B has stated though that once d2 is wrapped up (which should be just about now) he's going to start concentrating on the tool chain, so these sorts of issues I expect will get much better over the next 6 months. -- My enormous talent is exceeded only by my outrageous laziness. http://www.ssTk.co.uk
Aug 21 2010
parent reply Bob Cowdery <bob bobcowdery.plus.com> writes:
 On 22/08/2010 00:54, div0 wrote:
 On 21/08/2010 22:07, Bob Cowdery wrote:
   On 20/08/2010 18:44, div0 wrote:
 On 20/08/2010 09:17, Bob Cowdery wrote:
 I'm still concerned it's a bit too soon as a lot of things seem to be
 either Windows or Linux (cmake says its only tested for *nix) but not
 both and there is very little guidance on building. I really want
 to get
 this working on Windows first. As D makes so much of its binary
 compatibility with C I find it odd that there is no information on how
 to build mixed systems just on how to code the calls.
C compatibly is fine as long as you either build with dmc or convert the VC c libs to dmc's format. The conversion tool is only available as part of the paid tool set off of digital mars I think; though possibly there's a free one around. Try searching the learn archive it's been discussed before. Personnaly I just compile stuff with dmc and it all works great as long as you get the extern c declarations right.
I have compiled all my stuff now with dmc. It has some differences from gcc which caused me some issues. I then went to link up my program with a D front end and realised that I use many 3rd party libraries which will all need to be converted. This doesn't seem like such a great idea any more. Why does a modern language use an old object format I wonder. For me at least I'm wondering if it stacks up. Linux support seems secondary (correct me if I'm wrong). The only painless way to use C libraries is as dll's and even then the import library must be converted for which the tool in not free. The language itself is nice but the hassle factor for mixed language multi-platform seems quite high. I hope I'm wrong on both counts.
Well that's true; D still isn't really ready for production use, unless you have time or money to burn to do a lot of it yourself. I love D, but I only use it for my own small hobby projects. Mr B has stated though that once d2 is wrapped up (which should be just about now) he's going to start concentrating on the tool chain, so these sorts of issues I expect will get much better over the next 6 months.
Thanks, that's an honest opinion. The first project I have in mind is a personal one but it's quite large. My hope would be to move a lot of the C code into D eventually. I don't think I would risk it on a commercial project until the toolchain is sorted and its a bit more mature.
Aug 22 2010
parent Kagamin <spam here.lot> writes:
Bob Cowdery Wrote:

 Thanks, that's an honest opinion. The first project I have in mind is a
 personal one but it's quite large. My hope would be to move a lot of the
 C code into D eventually. I don't think I would risk it on a commercial
 project until the toolchain is sorted and its a bit more mature.
You can try to port it now. You have htod and some level of source compatibility with C.
Aug 23 2010