Thanks Barry. This was helpful Chris
On Sun, 6 Jul 2003 09:50:55 -0700, Barry Bond <[EMAIL PROTECTED]> wrote: >There are a bunch of small things to do... > >- edit sscli/clr/src/dirs and add Type1 to the list of directories. >This is what build.exe uses to determine what subdirectories to recurse >into. >- in your new sscli/clr/src/Type1 directory, copy "sources" and >"makefile" from sscli/clr/src/tools/ildbsymbols - they build a >reasonably bare-bones DLL so they're a good place to start. >- edit the sscli/clr/src/Type1/sources file, changing: > - TARGETLIBNAME - this contains the base filename of your DLL > - COFFBASE - also set this to the base filename of your DLL > - DLLDEF - specifies the name of the .DEF file to use > - DLLENTRY - specifies the main entrypoint into your DLL (ie. >DllMain) > - SOURCES - lists all C/C++ files that are to be compiled into >your DLL > - LINKLIBS - lists the .LIB files to link against, other than >the default ones that all EXEs and DLLs > link against. For your DLL, it should probably be empty >- edit all three >sscli/clr/bin/rotor_x86/{checked|fastchecked|free}/coffbase.txt files >and add your DLL into the list. These files control the preferred base >addresses of DLLs. >- edit sscli/rotorenv/bin/placefil.txt and add your DLL to the list, >with ".dll", ".dylib" and ".so" extensions. The second column in the >file specifies the destination directory that binplace should put the >file in - you'll want "retail", which translates to %TARGETCOMPLUS%, the >same as sscoree.dll's destination. > >That will get your DLL into the build. To reference it from another >DLL, like sscoree.dll or mscorejt.dll, edit the sources file that >creates the DLL (sscli/clr/src/dlls/mscoree/sources.inc or >sscli/clr/src/fjit/sources) and add your DLL's .lib file to the >TARGETLIBS list. > >All of these steps were derived from grepping the tree for "ildbsymbols" >- it is often easier just to copy some part of the project that already >works and edit, rather than starting from scratch. > >Barry >This posting is provided "AS IS" with no warranties, and confers no >rights. >-----Original Message----- >From: Discussion of the Rotor Shared Source CLI implementation >[mailto:[EMAIL PROTECTED] On Behalf Of Chris >Sent: Saturday, July 05, 2003 10:18 PM >To: [EMAIL PROTECTED] >Subject: Re: [DOTNET-ROTOR] Accessing the class in different source >folder > >Thanks Barry; this helps. Can you/someone shed some light onto my >next/second question: I want to limit my code into a separate folder and >expose it as dll to Rotor core. What changes should I do to Rotor make >to >detect this new directory (say clr/src/Type1) and build it as dll which >will be used in the similar way as mscorejit.dll. > >I could not infer it from previous reply or from sscli/docs. Thanks > >Chris > > >On Tue, 1 Jul 2003 04:52:15 -0700, Barry Bond <[EMAIL PROTECTED]> >wrote: > >>The fjit directory builds mscorejt.dll, while clr\src\vm builds >>cee_wks.lib, which is consumed by clr\src\dlls\mscoree to build >>sscoree.dll. On Windows, each DLL has its own private namespace for >>types and functions, with ".def" files controlling what names are made >>available to other DLLs. >> >>In addition, mscorejt.dll does not link against sscoree.dll: the >>linkage is one-way, from the EE to the JIT. Sscoree.dll loads >>mscorejt.dll dynamically (via LoadLibrary), then calls GetProcAddress >to >>look up the getJit() function address and calls it. This is the one >>place where function pointers and data are exchanged between >>mscorejt.dll and sscoree.dll, via the ICorJitInfo and ICorJitCompiler >>interfaces. >> >>The following steps are based on the pattern used already between the >EE >>and the JIT - I used ICorDynamicInfo:getHelperFtn as the reference, >>since it is implemented in the EE and called by the JIT: >>- add a new "ConstructMyType" method to the ICorJitInfo class: >> - in clr\src\inc\corinfo.h, add the following method >declaration >>to class ICorDynamicInfo: >> virtual Type1* __stdcall ConstructMyType1(void); >> - in clr\src\vm\jitinterface.h, add the following method to >>class CEEInfo: >> virtual Type1* __stdcall ConstructMyType1(void); >> - in clr\src\vm\jitinterface.cpp, implement >>CEEInfo::ConstructMyType1: >> Type1* __stdcall CEEInfo::ConstructMyType1(void) { >> return new Type1(); >> } >>- from within the JIT, call compHnd->ConstructMyType() to create the >>Type1 instance. >> >>If you have declared all methods in Type1 virtual and keep all data >>private/protected, then everything will work without having to link >>mscorejt.dll against sscoree.dll. >> >>Barry >>This posting is provided "AS IS" with no warranties, and confers no >>rights. >> >>-----Original Message----- >>From: Discussion of the Rotor Shared Source CLI implementation >>[mailto:[EMAIL PROTECTED] On Behalf Of Chris >>Sent: Monday, June 30, 2003 9:27 PM >>To: [EMAIL PROTECTED] >>Subject: [DOTNET-ROTOR] Accessing the class in different source folder >> >>2 related questions on building the rotor with my source files. I added >>few of my own files to src/fjit folder; they can build and run well if >I >>call into them from the file in fjit folder (I tested it by calling >from >>fjit.cpp). As per my requirements however, files in core folder has to >>communicate with my code in fjit folder. This is where I am running >into >>linker errors. I have following declarations in >jitinterface.JITFunction >> >>Type1 t1; >>Type1 *t2=new Type1( ); >> >> >>Type 1 is defined in file Type1.cpp in fjit folder. 2 Error mesgs that >I >>get are error >>LNK2019: unresolved external symbol "public: virtual __thiscall Type >>1::....." >> >>Are these errors because I have to link Type1.obj with the Core? If so, >>how can I do it. Either way, please elaborate. >> >>My second question is: since all my code is independent of code in fjit >>folder anyway, what changes (and how) I have to do in "make" so that I >>can >>keep all of my code in a separate folder under "src" and yet compile >and >>link it with Rotor in the usual way. Thanks in advance for >>clarifying.... >> >>Cheers >>Chris > >Thanks Barry; this helps. Can you/someone shed some light onto my next >question: I want to limit my code into a separate folder and expose it >as >dll to Rotor core. What changes should I do to Rotor make to detect this >new directory (say clr/src/Type1) and build it as dll which will be >consumed in the same way as mscorejit.dll. > >I could not infer it from previous reply or from sscli/docs. Thanks > >Chris Thanks Barry; this was helpful Chris