November 25, 2005
clayasaurus wrote:

> 
> I actually got a little bit farther than that compiling Raknet myself. For this error, you just have to do
> 
> current = 0;
> return current; // or return 0; or return NULL;
> 
> However, I came up against an even worse error saying it can't find the definition of one of the template members (find_node() or something) even though the function was defined in the right template. *sigh*
> 

I tried again, got a little further, and finally gave up. It was just too insanely complicated to figure out what was intended or what dmc didn't like about certain sections of those convoluted templates.

I see you've converted a sizeable portion of RakNet into D.  That's no easy task.  Trying to read and interpret that C++ would be challenging to say the least.  I'll look into it.  If I can add to it, I'll do what I can.

Thanks for all the hard work you've done so far.  Despite it's being in C++, Raknet does look like a very solid library.

-JJR
November 25, 2005
clayasaurus wrote:
> Walter Bright wrote:
> 
>> Did you email raknet and ask them to support DMC? Such things usually can
>> help a lot.
>>
>>
> 
> I sent a feature request in their forum to support DMC.

And I sent one directly to the author.
November 25, 2005
John Reimer wrote:
> clayasaurus wrote:
> 
>> Walter Bright wrote:
>>
>>> Did you email raknet and ask them to support DMC? Such things usually can
>>> help a lot.
>>>
>>>
>>
>> I sent a feature request in their forum to support DMC.
> 
> 
> And I sent one directly to the author.

A nice one, mind you.  I didn't sound cranky like I did here. ;)
November 25, 2005
I finally applied numerous hacks to get raknet to build under the DMC compiler, but there are still serious linking issues...

Here is a 'sample' of what i'm getting in case anyone else knows what is going on...

I also am going to check out mike's port now...

C:\CINTER~1>CFPATH="-CFPATH/etc/"

C:\CINTER~1>make -f Makefile.win
copy *.obj objs
chat.obj
rakbitstreamglue.obj
rakclientglue.obj
rakserverglue.obj
        4 file(s) copied.

C:\CINTER~1>build chat.d -g -Rn -full objs\*.obj C:\dmd\lib\WS2_32.lib C:\dmd\lib\phobos.lib C:\dm\lib\WSOCK32.lib C:\dm\lib\UUID.lib snn.lib C:\dm\lib\OLEAUT32.lib C:\dm\lib\KERNEL32.lib C:\dm\lib\CTL3D32.lib C:\dm\lib\ADVAPI32.lib C:\dm\lib\comctl32.lib C:\dm\lib\ODBC32.lib C:\dm\lib\RPCRt4.lib C:\dm\lib\stlp45dm_static.lib C:\dm\lib\WINMM.lib C:\dm\lib\COMDLG32.lib C:\dm\lib\OLE32.lib C:\dm\lib\SHELL32.lib C:\dm\lib\USER32.lib C:\dm\lib\WINSPOOL.lib
C:\dmd\bin\..\..\dm\bin\link.exe objs\*+chat+raknet\server+raknet\raknet+raknet\client+raknet\packetenumerations+raknet\packetpriority+raknet\networktypes,chat.exe,,C:\dm\lib\OLEAUT32.lib+C:\dm\lib\KERNEL32.lib+C:\dm\lib\ADVAPI32.lib+C:\dm\lib\comctl32.lib+C:\dm\lib\ODBC32.lib+C:\dm\lib\RPCRt4.lib+snn.lib+C:\dm\lib\COMDLG32.lib+C:\dm\lib\WSOCK32.lib+C:\dmd\lib\WS2_32.lib+C:\dmd\lib\phobos.lib+C:\dm\lib\OLE32.lib+C:\dm\lib\stlp45dm_static.lib+C:\dm\lib\CTL3D32.lib+C:\dm\lib\USER32.lib+C:\dm\lib\WINMM.lib+C:\dm\lib\WINSPOOL.lib+C:\dm\lib\UUID.lib+C:\dm\lib\SHELL32.lib+user32+kernel32,chat.def/co/noi;

OPTLINK (R) for Win32  Release 7.50B1
Copyright (C) Digital Mars 1989 - 2001  All Rights Reserved

objs\DistributedNetworkObjectManager.obj(DistributedNetworkObjectManager)  Offset 000D3H Record Type 0091
 Error 1: Previous Definition Different : ?UNASSIGNED_PLAYER_ID@@3UPlayerID@@B (const PlayerID UNASSIGNED_PLAYER_ID)
objs\DistributedNetworkObjectStub.obj(DistributedNetworkObjectStub) Offset 000D0H Record Type 0091
 Error 1: Previous Definition Different : ?UNASSIGNED_PLAYER_ID@@3UPlayerID@@B (const PlayerID UNASSIGNED_PLAYER_ID)
objs\FullyConnectedMesh.obj(FullyConnectedMesh)  Offset 00117H Record Type 0091
 Error 1: Previous Definition Different : ?UNASSIGNED_PLAYER_ID@@3UPlayerID@@B (const PlayerID UNASSIGNED_PLAYER_ID)
objs\MessageHandlerInterface.obj(MessageHandlerInterface)  Offset 000F6H Record Type 0091
 Error 1: Previous Definition Different : ?UNASSIGNED_PLAYER_ID@@3UPlayerID@@B (const PlayerID UNASSIGNED_PLAYER_ID)
objs\NetworkObject.obj(NetworkObject)  Offset 000C1H Record Type 0091
 Error 1: Previous Definition Different : ?UNASSIGNED_PLAYER_ID@@3UPlayerID@@B (const PlayerID UNASSIGNED_PLAYER_ID)
objs\NetworkTypes.obj(NetworkTypes)  Offset 000C0H Record Type 0091
 Error 1: Previous Definition Different : ?UNASSIGNED_PLAYER_ID@@3UPlayerID@@B (const PlayerID UNASSIGNED_PLAYER_ID)
objs\PacketPool.obj(PacketPool)  Offset 000BEH Record Type 0091
 Error 1: Previous Definition Different : ?UNASSIGNED_PLAYER_ID@@3UPlayerID@@B (const PlayerID UNASSIGNED_PLAYER_ID)
objs\rakbitstreamglue.obj(rakbitstreamglue)  Offset 000D8H Record Type 0091
 Error 1: Previous Definition Different : ?UNASSIGNED_PLAYER_ID@@3UPlayerID@@B (const PlayerID UNASSIGNED_PLAYER_ID)
objs\RakClient.obj(RakClient)  Offset 000BDH Record Type 0091
 Error 1: Previous Definition Different : ?UNASSIGNED_PLAYER_ID@@3UPlayerID@@B (const PlayerID UNASSIGNED_PLAYER_ID)
objs\RakClient.obj(RakClient)  Offset 000DEH Record Type 0091
 Error 1: Previous Definition Different : ?swapBE@cat@@YAXAAI@Z (void cdecl cat::swapBE(unsigned &))
objs\RakClient.obj(RakClient)  Offset 000F9H Record Type 0091
 Error 1: Previous Definition Different : ?swapBE@cat@@YAXAAG@Z (void cdecl cat::swapBE(unsigned short &))
objs\RakClient.obj(RakClient)  Offset 00111H Record Type 0091
 Error 1: Previous Definition Different : ?getBE@cat@@YAII@Z (unsigned cdecl cat::getBE(unsigned ))
objs\RakClient.obj(RakClient)  Offset 00129H Record Type 0091
 Error 1: Previous Definition Different : ?getBE@cat@@YAGG@Z (unsigned short cdecl cat::getBE(unsigned short ))
objs\RakClient.obj(RakClient)  Offset 0014AH Record Type 0091
 Error 1: Previous Definition Different : ?swapBE@cat@@YAXAAH@Z (void cdecl cat::swapBE(int &))
objs\RakClient.obj(RakClient)  Offset 00165H Record Type 0091
 Error 1: Previous Definition Different : ?swapBE@cat@@YAXAAF@Z (void cdecl cat::swapBE(short &))
objs\RakClient.obj(RakClient)  Offset 0017DH Record Type 0091
 Error 1: Previous Definition Different : ?getBE@cat@@YAHH@Z (int cdecl cat::getBE(int ))
objs\RakClient.obj(RakClient)  Offset 00195H Record Type 0091
 Error 1: Previous Definition Different : ?getBE@cat@@YAFF@Z (short cdecl cat::getBE(short ))
objs\RakClient.obj(RakClient)  Offset 00333H Record Type 0091
 Error 1: Previous Definition Different : ?next_highest_power_of_2@@YAII@Z (unsigned cdecl next_highest_power_of_2(unsigned ))
objs\rakclientglue.obj(rakclientglue)  Offset 000DDH Record Type 0091
 Error 1: Previous Definition Different : ?UNASSIGNED_PLAYER_ID@@3UPlayerID@@B (const PlayerID UNASSIGNED_PLAYER_ID)
objs\RakNetworkFactory.obj(RakNetworkFactory)  Offset 000C5H Record Type 0091
 Error 1: Previous Definition Different : ?UNASSIGNED_PLAYER_ID@@3UPlayerID@@B (const PlayerID UNASSIGNED_PLAYER_ID)
objs\RakNetworkFactory.obj(RakNetworkFactory)  Offset 000E6H Record Type 0091
 Error 1: Previous Definition Different : ?swapBE@cat@@YAXAAI@Z (void cdecl cat::swapBE(unsigned &))
objs\RakNetworkFactory.obj(RakNetworkFactory)  Offset 00101H Record Type 0091
 Error 1: Previous Definition Different : ?swapBE@cat@@YAXAAG@Z (void cdecl cat::swapBE(unsigned short &))
objs\RakNetworkFactory.obj(RakNetworkFactory)  Offset 00119H Record Type 0091
 Error 1: Previous Definition Different : ?getBE@cat@@YAII@Z (unsigned cdecl cat::getBE(unsigned ))
objs\RakNetworkFactory.obj(RakNetworkFactory)  Offset 00131H Record Type 0091
 Error 1: Previous Definition Different : ?getBE@cat@@YAGG@Z (unsigned short cdecl cat::getBE(unsigned short ))
objs\RakNetworkFactory.obj(RakNetworkFactory)  Offset 00152H Record Type 0091
 Error 1: Previous Definition Different : ?swapBE@cat@@YAXAAH@Z (void cdecl cat::swapBE(int &))
objs\RakNetworkFactory.obj(RakNetworkFactory)  Offset 0016DH Record Type 0091
 Error 1: Previous Definition Different : ?swapBE@cat@@YAXAAF@Z (void cdecl cat::swapBE(short &))
objs\RakNetworkFactory.obj(RakNetworkFactory)  Offset 00185H Record Type 0091
 Error 1: Previous Definition Different : ?getBE@cat@@YAHH@Z (int cdecl cat::getBE(int ))
objs\RakNetworkFactory.obj(RakNetworkFactory)  Offset 0019DH Record Type 0091
 Error 1: Previous Definition Different : ?getBE@cat@@YAFF@Z (short cdecl cat::getBE(short ))
objs\RakNetworkFactory.obj(RakNetworkFactory)  Offset 001C9H Record Type 0091
 Error 1: Previous Definition Different : ?next_highest_power_of_2@@YAII@Z (unsigned cdecl next_highest_power_of_2(unsigned ))
objs\RakPeer.obj(RakPeer)  Offset 000BBH Record Type 0091
 Error 1: Previous Definition Different : ?UNASSIGNED_PLAYER_ID@@3UPlayerID@@B (const PlayerID UNASSIGNED_PLAYER_ID)
objs\RakPeer.obj(RakPeer)  Offset 000DCH Record Type 0091

clayasaurus wrote:
> Bindings here --> http://svn.dsource.org/projects/bindings/trunk/raknet/
> 
> http://www.rakkarsoft.com/
> "A free networking API that provides reliable UDP and high level networking constructs on Windows, Linux, and Unix"
> 
> What I did was create a C wrapper for the C++ code, and then created a D wrapper for the C wrapper.
> 
> Unfortunetly, due to linker issues, I have not been able to get it to work under windows. More information here ( http://svn.dsource.org/projects/bindings/trunk/raknet/README.txt )
> 
> I'm hoping some windows programmer comes along, finds this, and manages to get it to work for windows. If somebody does, please email me. I think your best bet would be to avoid the linker and try loading the DLL at runtime.
> 
> I should also mention this is not a full fledged binding, not all features of raknet are exposed. It is enough for simple multiplayer games however, and it would be very easy to extend this binding. I think it is a good starting point, coming with two quality samples (basic chat client/serv, intermediate opengl line drawing client/serv).
> 
> Goodluck. *x-fingers someone manages a windows port*
> 
> ~ Clay
November 25, 2005
clayasaurus wrote:
> I finally applied numerous hacks to get raknet to build under the DMC compiler, but there are still serious linking issues...
> 

All I can say is a heartfelt "Wow."  I had given up. You didn't.  What I was afraid of was that my hacks were inserting dangerous fixes into the code.

> Here is a 'sample' of what i'm getting in case anyone else knows what is going on...
> 
> I also am going to check out mike's port now...
> 
> C:\CINTER~1>CFPATH="-CFPATH/etc/"
> 
> C:\CINTER~1>make -f Makefile.win
> copy *.obj objs
> chat.obj
> rakbitstreamglue.obj
> rakclientglue.obj
> rakserverglue.obj
>         4 file(s) copied.
> 
> C:\CINTER~1>build chat.d -g -Rn -full objs\*.obj C:\dmd\lib\WS2_32.lib C:\dmd\lib\phobos.lib C:\dm\lib\WSOCK32.lib C:\dm\lib\UUID.lib snn.lib C:\dm\lib\OLEAUT32.lib C:\dm\lib\KERNEL32.lib C:\dm\lib\CTL3D32.lib C:\dm\lib\ADVAPI32.lib C:\dm\lib\comctl32.lib C:\dm\lib\ODBC32.lib C:\dm\lib\RPCRt4.lib C:\dm\lib\stlp45dm_static.lib C:\dm\lib\WINMM.lib C:\dm\lib\COMDLG32.lib C:\dm\lib\OLE32.lib C:\dm\lib\SHELL32.lib C:\dm\lib\USER32.lib C:\dm\lib\WINSPOOL.lib
> C:\dmd\bin\..\..\dm\bin\link.exe objs\*+chat+raknet\server+raknet\raknet+raknet\client+raknet\packetenumerations+raknet\packetpriority+raknet\networktypes,chat.exe,,C:\dm\lib\OLEAUT32.lib+C:\dm\lib\KERNEL32.lib+C:\dm\lib\ADVAPI32.lib+C:\dm\lib\comctl32.lib+C:\dm\lib\ODBC32.lib+C:\dm\lib\RPCRt4.lib+snn.lib+C:\dm\lib\COMDLG32.lib+C:\dm\lib\WSOCK32.lib+C:\dmd\lib\WS2_32.lib+C:\dmd\lib\phobos.lib+C:\dm\lib\OLE32.lib+C:\dm\lib\stlp45dm_static.lib+C:\dm\lib\CTL3D32.lib+C:\dm\lib\USER32.lib+C:\dm\lib\WINMM.lib+C:\dm\lib\WINSPOOL.lib+C:\dm\lib\UUID.lib+C:\dm\lib\SHELL32.lib+user32+kernel32,chat.def/co/noi; 
> 
> 
> OPTLINK (R) for Win32  Release 7.50B1
> Copyright (C) Digital Mars 1989 - 2001  All Rights Reserved
> 
> objs\DistributedNetworkObjectManager.obj(DistributedNetworkObjectManager)  Offset 000D3H Record Type 0091
>  Error 1: Previous Definition Different : ?UNASSIGNED_PLAYER_ID@@3UPlayerID@@B (const PlayerID UNASSIGNED_PLAYER_ID)
> objs\DistributedNetworkObjectStub.obj(DistributedNetworkObjectStub) Offset 000D0H Record Type 0091
>  Error 1: Previous Definition Different : ?UNASSIGNED_PLAYER_ID@@3UPlayerID@@B (const PlayerID UNASSIGNED_PLAYER_ID)
> objs\FullyConnectedMesh.obj(FullyConnectedMesh)  Offset 00117H Record Type 0091
>  Error 1: Previous Definition Different : ?UNASSIGNED_PLAYER_ID@@3UPlayerID@@B (const PlayerID UNASSIGNED_PLAYER_ID)
> objs\MessageHandlerInterface.obj(MessageHandlerInterface)  Offset 000F6H Record Type 0091
>  Error 1: Previous Definition Different : ?UNASSIGNED_PLAYER_ID@@3UPlayerID@@B (const PlayerID UNASSIGNED_PLAYER_ID)
> objs\NetworkObject.obj(NetworkObject)  Offset 000C1H Record Type 0091
>  Error 1: Previous Definition Different : ?UNASSIGNED_PLAYER_ID@@3UPlayerID@@B (const PlayerID UNASSIGNED_PLAYER_ID)
> objs\NetworkTypes.obj(NetworkTypes)  Offset 000C0H Record Type 0091
>  Error 1: Previous Definition Different : ?UNASSIGNED_PLAYER_ID@@3UPlayerID@@B (const PlayerID UNASSIGNED_PLAYER_ID)
> objs\PacketPool.obj(PacketPool)  Offset 000BEH Record Type 0091
>  Error 1: Previous Definition Different : ?UNASSIGNED_PLAYER_ID@@3UPlayerID@@B (const PlayerID UNASSIGNED_PLAYER_ID)
> objs\rakbitstreamglue.obj(rakbitstreamglue)  Offset 000D8H Record Type 0091
>  Error 1: Previous Definition Different : ?UNASSIGNED_PLAYER_ID@@3UPlayerID@@B (const PlayerID UNASSIGNED_PLAYER_ID)
> objs\RakClient.obj(RakClient)  Offset 000BDH Record Type 0091
>  Error 1: Previous Definition Different : ?UNASSIGNED_PLAYER_ID@@3UPlayerID@@B (const PlayerID UNASSIGNED_PLAYER_ID)
> objs\RakClient.obj(RakClient)  Offset 000DEH Record Type 0091
>  Error 1: Previous Definition Different : ?swapBE@cat@@YAXAAI@Z (void cdecl cat::swapBE(unsigned &))
> objs\RakClient.obj(RakClient)  Offset 000F9H Record Type 0091
>  Error 1: Previous Definition Different : ?swapBE@cat@@YAXAAG@Z (void cdecl cat::swapBE(unsigned short &))
> objs\RakClient.obj(RakClient)  Offset 00111H Record Type 0091
>  Error 1: Previous Definition Different : ?getBE@cat@@YAII@Z (unsigned cdecl cat::getBE(unsigned ))
> objs\RakClient.obj(RakClient)  Offset 00129H Record Type 0091
>  Error 1: Previous Definition Different : ?getBE@cat@@YAGG@Z (unsigned short cdecl cat::getBE(unsigned short ))
> objs\RakClient.obj(RakClient)  Offset 0014AH Record Type 0091
>  Error 1: Previous Definition Different : ?swapBE@cat@@YAXAAH@Z (void cdecl cat::swapBE(int &))
> objs\RakClient.obj(RakClient)  Offset 00165H Record Type 0091
>  Error 1: Previous Definition Different : ?swapBE@cat@@YAXAAF@Z (void cdecl cat::swapBE(short &))
> objs\RakClient.obj(RakClient)  Offset 0017DH Record Type 0091
>  Error 1: Previous Definition Different : ?getBE@cat@@YAHH@Z (int cdecl cat::getBE(int ))
> objs\RakClient.obj(RakClient)  Offset 00195H Record Type 0091
>  Error 1: Previous Definition Different : ?getBE@cat@@YAFF@Z (short cdecl cat::getBE(short ))
> objs\RakClient.obj(RakClient)  Offset 00333H Record Type 0091
>  Error 1: Previous Definition Different : ?next_highest_power_of_2@@YAII@Z (unsigned cdecl next_highest_power_of_2(unsigned ))
> objs\rakclientglue.obj(rakclientglue)  Offset 000DDH Record Type 0091
>  Error 1: Previous Definition Different : ?UNASSIGNED_PLAYER_ID@@3UPlayerID@@B (const PlayerID UNASSIGNED_PLAYER_ID)
> objs\RakNetworkFactory.obj(RakNetworkFactory)  Offset 000C5H Record Type 0091
>  Error 1: Previous Definition Different : ?UNASSIGNED_PLAYER_ID@@3UPlayerID@@B (const PlayerID UNASSIGNED_PLAYER_ID)
> objs\RakNetworkFactory.obj(RakNetworkFactory)  Offset 000E6H Record Type 0091
>  Error 1: Previous Definition Different : ?swapBE@cat@@YAXAAI@Z (void cdecl cat::swapBE(unsigned &))
> objs\RakNetworkFactory.obj(RakNetworkFactory)  Offset 00101H Record Type 0091
>  Error 1: Previous Definition Different : ?swapBE@cat@@YAXAAG@Z (void cdecl cat::swapBE(unsigned short &))
> objs\RakNetworkFactory.obj(RakNetworkFactory)  Offset 00119H Record Type 0091
>  Error 1: Previous Definition Different : ?getBE@cat@@YAII@Z (unsigned cdecl cat::getBE(unsigned ))
> objs\RakNetworkFactory.obj(RakNetworkFactory)  Offset 00131H Record Type 0091
>  Error 1: Previous Definition Different : ?getBE@cat@@YAGG@Z (unsigned short cdecl cat::getBE(unsigned short ))
> objs\RakNetworkFactory.obj(RakNetworkFactory)  Offset 00152H Record Type 0091
>  Error 1: Previous Definition Different : ?swapBE@cat@@YAXAAH@Z (void cdecl cat::swapBE(int &))
> objs\RakNetworkFactory.obj(RakNetworkFactory)  Offset 0016DH Record Type 0091
>  Error 1: Previous Definition Different : ?swapBE@cat@@YAXAAF@Z (void cdecl cat::swapBE(short &))
> objs\RakNetworkFactory.obj(RakNetworkFactory)  Offset 00185H Record Type 0091
>  Error 1: Previous Definition Different : ?getBE@cat@@YAHH@Z (int cdecl cat::getBE(int ))
> objs\RakNetworkFactory.obj(RakNetworkFactory)  Offset 0019DH Record Type 0091
>  Error 1: Previous Definition Different : ?getBE@cat@@YAFF@Z (short cdecl cat::getBE(short ))
> objs\RakNetworkFactory.obj(RakNetworkFactory)  Offset 001C9H Record Type 0091
>  Error 1: Previous Definition Different : ?next_highest_power_of_2@@YAII@Z (unsigned cdecl next_highest_power_of_2(unsigned ))
> objs\RakPeer.obj(RakPeer)  Offset 000BBH Record Type 0091
>  Error 1: Previous Definition Different : ?UNASSIGNED_PLAYER_ID@@3UPlayerID@@B (const PlayerID UNASSIGNED_PLAYER_ID)
> objs\RakPeer.obj(RakPeer)  Offset 000DCH Record Type 0091
> 

Yes, I discussed "similar" errors earlier.... I think at dsource.org. DMC, for some reason, imports every instance of "const PlayerID UNASSIGNED_PLAYER_ID;" into each object file, instead of making a single global instance of it.  UNASSIGNED_PLAYER_ID is located in raknet\include\NetworkTypes.h.  PlayerID is a struct with operator overloads declared in the same file.  For some reason, any file that includes this header, seems to get a separate UNASSIGNED_PLAYER_ID added to the global space.  When you try to put all objects together in a library... I'm guessing they conflict.  I don't know if that's how it works, but it sure seems to.  The best I can think of is to follow Walter's suggestion and use obj2asm on each object file to see what symbols are in there.  I don't know how to prevent this.  It's certainly very strange.

-JJR
November 25, 2005
"John Reimer" <terminal.node@gmail.com> wrote in message news:dm6509$2dui$1@digitaldaemon.com...
> Well we're in trouble then.  I bet the RakNet developer got a grand total of 2 emails.  One from Clay, one from me.

I know it may seem futile from your end, but those emails do make a difference.

> Quite frankly, it
> appears the raknet code is so compiler specific as to make the port to a
> new compiler a major headache, even for the RakNet developer himself.
> Since he provides his library free, his response is more likely to be
> "do it yourself."  That won't do, of course, for the moment.

I don't think it would be that bad for someone who is intimately familiar with the raknet code and what it is trying to do. It would be pretty hard for anyone else, though.

> After seeing all the subtle C++ conflicts amongst the compilers, I have
> one rueful comment:  C++, as we know it, is a farce, a fake, a false
> hope; it's a language full of ambiguities, one only a lawyer could love.
>   C++ is only useful if you stick to one compiler vender's dialect, and
> learn it well.

What often happens is professionals stick to a subset of C++ that tends to work across compilers. Then there are also those who simply must rely on the behavior of every corner case; they tend to spend a lot of time struggling with diverse compilers. As anyone can see with the DMD front end code, I am in the former camp <g>.

> What a joke! (forgive me... obviously I'm still in the blowing-off-steam mode; I just can't believe C++ has captured the hearts and minds of so many: it's very much like the emperor's new clothes).

There was nothing else comparable in power in the late 80's and early 90's, not even close.

> As it turns out, the DLL version of RakNet, with a C wrapping, is the best option for interfacing with D, at the moment (dsource.org apparently already had such a wrapping).  Recoding in D would be a clean solution, though a hefty one and bug prone for the first long while. We'll see what comes of this.

I'd still like to see it in D <g>.


November 25, 2005
"clayasaurus" <clayasaurus@gmail.com> wrote in message news:dm66eh$2f50$1@digitaldaemon.com...
>   Error 1: Previous Definition Different : ?getBE@cat@@YAGG@Z (unsigned
> short cdecl cat::getBE(unsigned short ))
> objs\RakNetworkFactory.obj(RakNetworkFactory)  Offset 00152H Record Type
> 0091

That means getBE(unsigned short) is multiply defined. Doing a grep for the identifier in the .obj files should help.


November 25, 2005
Walter Bright wrote:
> "clayasaurus" <clayasaurus@gmail.com> wrote in message
> news:dm66eh$2f50$1@digitaldaemon.com...
> 
>>  Error 1: Previous Definition Different : ?getBE@cat@@YAGG@Z (unsigned
>>short cdecl cat::getBE(unsigned short ))
>>objs\RakNetworkFactory.obj(RakNetworkFactory)  Offset 00152H Record Type
>>0091
> 
> 
> That means getBE(unsigned short) is multiply defined. Doing a grep for the
> identifier in the .obj files should help.
> 
> 

Ahh thanks. I've managed to get my symbol error list down to...

objs\DataBlockEncryptor.obj(DataBlockEncryptor)
 Error 42: Symbol Undefined ?set_key@AES128@@QAEXQBE@Z (void syscall AES128::set_key(unsigned char const *const ))
objs\RakPeer.obj(RakPeer)
 Error 42: Symbol Undefined ?DecodeArray@HuffmanEncodingTree@@QAEXPAEHPAVBitStream@RakNet@@@Z (void syscall HuffmanEncodingTree::DecodeArray(unsigned char *,int ,BitStream::RakNet *))
objs\RakPeer.obj(RakPeer)
 Error 42: Symbol Undefined ?EncodeArray@HuffmanEncodingTree@@QAEXPAEHPAVBitStream@RakNet@@@Z (void syscall HuffmanEncodingTree::EncodeArray(unsigned char *,int ,BitStream::RakNet *))
objs\RakPeer.obj(RakPeer)
 Error 42: Symbol Undefined ??1HuffmanEncodingTree@@QAE@XZ (syscall HuffmanEncodingTree::~HuffmanEncodingTree(void ))
objs\RakPeer.obj(RakPeer)
 Error 42: Symbol Undefined ?GenerateFromFrequencyTable@HuffmanEncodingTree@@QAEXPAI@Z (void syscall HuffmanEncodingTree::GenerateFromFrequencyTable(unsigned *))
objs\RakPeer.obj(RakPeer)
 Error 42: Symbol Undefined ??0HuffmanEncodingTree@@QAE@XZ (syscall HuffmanEncodingTree::HuffmanEncodingTree(void ))
objs\RakPeer.obj(RakPeer)
 Error 42: Symbol Undefined ?_beginthreadex@@YAKPAXIP6GI0@Z0IPAI@Z (unsigned long cdecl _beginthreadex(void *,unsigned ,unsigned stdcall (*)(void *),void *,unsigned ,unsigned *))
objs\StringCompressor.obj(StringCompressor)
 Error 42: Symbol Undefined ?DecodeArray@HuffmanEncodingTree@@QAEHPAVBitStream@RakNet@@HHPAE@Z (int syscall HuffmanEncodingTree::DecodeArray(BitStream::RakNet *,int ,int ,unsigned char *))


and here is the result of grep "set_key" in my object directory...

AES128.obj:..?set_key@AES128@@QAEXPBE@Z..
DataBlockEncryptor.obj:.?set_key@AES128@@QAEXQBE@Z

I'm going to play around with the source some more, but if anything is immedietely obvious or if you have any helpful hints/suggestions they would be much appreciated. Thanks.

~ Clay


November 25, 2005
nevermind I've managed to get it down to just

Error 42: Symbol Undefined ?_beginthreadex@@YAKPAXIP6GI0@Z0IPAI@Z
(unsigned long cdecl _beginthreadex(void *,unsigned ,unsigned stdcall
(*)(void *),void *,unsigned ,unsigned *))
objs\StringCompressor.obj(StringCompressor)

now.

clayasaurus wrote:
> Walter Bright wrote:
> 
>> "clayasaurus" <clayasaurus@gmail.com> wrote in message
>> news:dm66eh$2f50$1@digitaldaemon.com...
>>
>>>  Error 1: Previous Definition Different : ?getBE@cat@@YAGG@Z (unsigned
>>> short cdecl cat::getBE(unsigned short ))
>>> objs\RakNetworkFactory.obj(RakNetworkFactory)  Offset 00152H Record Type
>>> 0091
>>
>>
>>
>> That means getBE(unsigned short) is multiply defined. Doing a grep for the
>> identifier in the .obj files should help.
>>
>>
> 
> Ahh thanks. I've managed to get my symbol error list down to...
> 
> objs\DataBlockEncryptor.obj(DataBlockEncryptor)
>  Error 42: Symbol Undefined ?set_key@AES128@@QAEXQBE@Z (void syscall AES128::set_key(unsigned char const *const ))
> objs\RakPeer.obj(RakPeer)
>  Error 42: Symbol Undefined ?DecodeArray@HuffmanEncodingTree@@QAEXPAEHPAVBitStream@RakNet@@@Z (void syscall HuffmanEncodingTree::DecodeArray(unsigned char *,int ,BitStream::RakNet *))
> objs\RakPeer.obj(RakPeer)
>  Error 42: Symbol Undefined ?EncodeArray@HuffmanEncodingTree@@QAEXPAEHPAVBitStream@RakNet@@@Z (void syscall HuffmanEncodingTree::EncodeArray(unsigned char *,int ,BitStream::RakNet *))
> objs\RakPeer.obj(RakPeer)
>  Error 42: Symbol Undefined ??1HuffmanEncodingTree@@QAE@XZ (syscall HuffmanEncodingTree::~HuffmanEncodingTree(void ))
> objs\RakPeer.obj(RakPeer)
>  Error 42: Symbol Undefined ?GenerateFromFrequencyTable@HuffmanEncodingTree@@QAEXPAI@Z (void syscall HuffmanEncodingTree::GenerateFromFrequencyTable(unsigned *))
> objs\RakPeer.obj(RakPeer)
>  Error 42: Symbol Undefined ??0HuffmanEncodingTree@@QAE@XZ (syscall HuffmanEncodingTree::HuffmanEncodingTree(void ))
> objs\RakPeer.obj(RakPeer)
>  Error 42: Symbol Undefined ?_beginthreadex@@YAKPAXIP6GI0@Z0IPAI@Z (unsigned long cdecl _beginthreadex(void *,unsigned ,unsigned stdcall (*)(void *),void *,unsigned ,unsigned *))
> objs\StringCompressor.obj(StringCompressor)
>  Error 42: Symbol Undefined ?DecodeArray@HuffmanEncodingTree@@QAEHPAVBitStream@RakNet@@HHPAE@Z (int syscall HuffmanEncodingTree::DecodeArray(BitStream::RakNet *,int ,int ,unsigned char *))
> 
> 
> and here is the result of grep "set_key" in my object directory...
> 
> AES128.obj:..?set_key@AES128@@QAEXPBE@Z..
> DataBlockEncryptor.obj:.?set_key@AES128@@QAEXQBE@Z
> 
> I'm going to play around with the source some more, but if anything is immedietely obvious or if you have any helpful hints/suggestions they would be much appreciated. Thanks.
> 
> ~ Clay
> 
> 
November 25, 2005
"clayasaurus" <clayasaurus@gmail.com> wrote in message news:dm6epb$2lfa$1@digitaldaemon.com...
> nevermind I've managed to get it down to just
>
> Error 42: Symbol Undefined ?_beginthreadex@@YAKPAXIP6GI0@Z0IPAI@Z
> (unsigned long cdecl _beginthreadex(void *,unsigned ,unsigned stdcall
> (*)(void *),void *,unsigned ,unsigned *))
> objs\StringCompressor.obj(StringCompressor)

_beginthreadex is declared in \dm\include\process.h. But it's supposed to have C linkage, not C++ linkage as your reference is looking for.