Dynamic D Library

BCS ao at pathlink.com
Mon Jul 27 13:18:50 PDT 2009


Reply to teo,

> On Mon, 27 Jul 2009 17:17:35 +0000, BCS wrote:
> 
>> Reply to teo,
>> 
>>> I did some tests and here are the results: D cannot be used in
>>> Shared Objects. The only case that works is when no classes are
>>> exported and when there are no references to Phobos within the
>>> library.
>>> 
>> two of your fail cases have non SO realted errors:
>> 
> Correct. These are shortcomings of D.
> 
>>> ==========
>>> DOESN'T WORK without extern(C). Cannot compile the program. module
>>> test; // file "test.d"
>>> int test()
>>> {
>>> return 1;
>>> }
>>> ---
>>> module main; // file "prog.d"
>>> import std.stdio;
>>> extern(C) int test();
>> this should not be extern(C).
>> 
> How will you do it? Give me an example please.
> 

Remove "extern(C)" from the prototype in that example an try it again?

>>> void main()
>>> {
>>> writefln("Result: %d", test());
>>> return;
>>> }
>>> ==========
>>> DOESN'T WORK with classes defined in the library. The program cannot
>>> be
>>> compiled.
>>> module test; // file "test.d"
>>> extern(C)
>>> {
>>> class Test
>>> {
>> [...]
>> 
>>> }
>>> }
>> An extern(C) class would be meaningless and I don't think they are
>> even legal. I can't seem tor repro it with the version I have here
>> (1.034) but I got an error from this code on another system:
>> 
>> extern(C) class C { }
>> C Fn(){return new C();}
>
> I use v2.031 and cannot export a class out of a library.

Have you tried that example case again but with all "exter(C)" removed?





More information about the Digitalmars-d mailing list