sketchucation logo sketchucation
    • Login
    ℹ️ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info

    [Tutorial] SketchUp Ruby C Extension

    Scheduled Pinned Locked Moved Developers' Forum
    176 Posts 16 Posters 25.9k Views 16 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Dan RathbunD Offline
      Dan Rathbun
      last edited by

      @thomthom said:

      Though I have a suspicion I need to specify the path to where windows.h is located... Though I don't know where to do so...

      To do so via the IDE... from the menu Tools > Options...

      .. brings up the "Options" dialog.
      Choose "VC++ Directories" from the "Projects and Solutions" branch in the nav tree.
      You can see the dirs for catagories by selecting the cat from the "Show directories for:" dropdown control:

      Executable files:
      VCpp_opts_exe.png

      Include files:
      VCpp_opts_inc.png

      I'm not here much anymore.

      1 Reply Last reply Reply Quote 0
      • Dan RathbunD Offline
        Dan Rathbun
        last edited by

        Don't forget the "help" topic here:
        [Info] C/C++ Ruby extensions & SketchUp plugins
        .. and read Adan Nelson's posts (links on the above list.)

        I'm not here much anymore.

        1 Reply Last reply Reply Quote 0
        • Dan RathbunD Offline
          Dan Rathbun
          last edited by

          from the info file "win32.readme" in the Ruby C source:
          @unknownuser said:

          You can NOT use a path name [that] contains any white space characters as
          the ruby source directory, this restriction comes from the behavior of include directives of NMAKE.
          (- you may call it a bug. -)

          I'm not here much anymore.

          1 Reply Last reply Reply Quote 0
          • tbdT Offline
            tbd
            last edited by

            Thom: #pragma comment(lib, "*.lib") adds the libraries to the link phase (that hold imports and functions code)

            it was a way to make sure that it will compile even if you create a new project and don't use in mine in PellesC.

            SketchUp Ruby Consultant | Podium 1.x developer
            http://plugins.ro

            1 Reply Last reply Reply Quote 0
            • thomthomT Offline
              thomthom
              last edited by

              Right'o! Gotcha. Been reading more up on C and GCC.

              Thomas Thomassen β€” SketchUp Monkey & Coding addict
              List of my plugins and link to the CookieWare fund

              1 Reply Last reply Reply Quote 0
              • T Offline
                tomasz
                last edited by

                Thanks Thomas for the example.

                I do not understand what is 'extconf.rb' for. I have compiled my extension under VC++ 2008 without running the file and without using any makefile... Is it bad ? πŸ˜• πŸ’š

                Author of [Thea Render for SketchUp](http://www.thearender.com/sketchup)

                1 Reply Last reply Reply Quote 0
                • tbdT Offline
                  tbd
                  last edited by

                  extconf.rb - external configuration, it generates the makefile to create the extension. using makefile you can automate builds and tests.

                  SketchUp Ruby Consultant | Podium 1.x developer
                  http://plugins.ro

                  1 Reply Last reply Reply Quote 0
                  • thomthomT Offline
                    thomthom
                    last edited by

                    extconf.rb generates a make file you can use with make under OSX and nmake under Windows.
                    http://ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html#UG

                    Thomas Thomassen β€” SketchUp Monkey & Coding addict
                    List of my plugins and link to the CookieWare fund

                    1 Reply Last reply Reply Quote 0
                    • thomthomT Offline
                      thomthom
                      last edited by

                      @unknownuser said:

                      I have compiled my extension under VC++ 2008

                      How big difference is making a Ruby Extension in C++ as oppose to C? ...seeing how Ruby is built in C... ❓

                      Thomas Thomassen β€” SketchUp Monkey & Coding addict
                      List of my plugins and link to the CookieWare fund

                      1 Reply Last reply Reply Quote 0
                      • T Offline
                        tomasz
                        last edited by

                        @unknownuser said:

                        extconf.rb - external configuration, it generates the makefile to create the extension. using makefile you can automate builds and tests.

                        Got it! In VC++ I have to configure it on my own.

                        @thomthom said:

                        How big difference is making a Ruby Extension in C++ as oppose to C? ...seeing how Ruby is built in C... ❓

                        You certainly would need to enclose declaration of the extension initialization with extern "C":

                        extern "C" {
                        void Init_SX_HelloWorld(); 
                        }
                        

                        I am not really an expert, but I guess all the rest would stay same.

                        Author of [Thea Render for SketchUp](http://www.thearender.com/sketchup)

                        1 Reply Last reply Reply Quote 0
                        • thomthomT Offline
                          thomthom
                          last edited by

                          Added a new example with basic functions. Will start on the tutorial text and images next.

                          Btw, does anyone know how one can make extconf.rb and make/nmake output their files to a given folder? I'd like to make it so that each platform outputs its generated files to separate directories.

                          Thomas Thomassen β€” SketchUp Monkey & Coding addict
                          List of my plugins and link to the CookieWare fund

                          1 Reply Last reply Reply Quote 0
                          • Chris FullmerC Offline
                            Chris Fullmer
                            last edited by

                            What C++ compiler or development environment are you going to write this for so I can go download it and start poking around in it?

                            Lately you've been tan, suspicious for the winter.
                            All my Plugins I've written

                            1 Reply Last reply Reply Quote 0
                            • thomthomT Offline
                              thomthom
                              last edited by

                              I am writing the extensions in C. But under windows I installed Visual C++ Express 2010 because it has the required Windows headers and nmake to compile it. I have some crude notes in the README.txt in the repo. Under OSX you need X Tools from the OSX DVD.

                              Thomas Thomassen β€” SketchUp Monkey & Coding addict
                              List of my plugins and link to the CookieWare fund

                              1 Reply Last reply Reply Quote 0
                              • thomthomT Offline
                                thomthom
                                last edited by

                                Note that I never use the Visual C++ IDE editor.

                                Thomas Thomassen β€” SketchUp Monkey & Coding addict
                                List of my plugins and link to the CookieWare fund

                                1 Reply Last reply Reply Quote 0
                                • J Offline
                                  Jim
                                  last edited by

                                  Just wondering if there's any reason that MinGW instead of MSVC++ could not be used to compile c extensions. I assume the c extension is a libaray and doesn't require any Windows-specific GUI stuff - it's just a library of functions, right?

                                  Hi

                                  1 Reply Last reply Reply Quote 0
                                  • Dan RathbunD Offline
                                    Dan Rathbun
                                    last edited by

                                    @thomthom said:

                                    Btw, does anyone know how one can make extconf.rb and make/nmake output their files to a given folder? I'd like to make it so that each platform outputs its generated files to separate directories.

                                    Did you check the methods defined in "mkmf.rb" ?
                                    (You can also see "Appendix C. Functions Available in extconf.rb" in the "README.EXT" file.)

                                    .. also check our the "extmk.rb" file in the ext dir.

                                    I'm not here much anymore.

                                    1 Reply Last reply Reply Quote 0
                                    • thomthomT Offline
                                      thomthom
                                      last edited by

                                      @jim said:

                                      Just wondering if there's any reason that MinGW instead of MSVC++ could not be used to compile c extensions. I assume the c extension is a libaray and doesn't require any Windows-specific GUI stuff - it's just a library of functions, right?

                                      Dunno. I'd think it'd be possible. But I really have no clue when it comes to compiling. It'd be nice to have tutorials for different compilers. So please feel free to jump on the bandwagon πŸ˜‰ )

                                      Thomas Thomassen β€” SketchUp Monkey & Coding addict
                                      List of my plugins and link to the CookieWare fund

                                      1 Reply Last reply Reply Quote 0
                                      • thomthomT Offline
                                        thomthom
                                        last edited by

                                        @dan rathbun said:

                                        Did you check the methods defined in "mkmf.rb" ?
                                        (You can also see "Appendix C. Functions Available in extconf.rb" in the "README.EXT" file.)

                                        .. also check our the "extmk.rb" file in the ext dir.

                                        Yea, got a wee bit lost... πŸ˜•

                                        Thomas Thomassen β€” SketchUp Monkey & Coding addict
                                        List of my plugins and link to the CookieWare fund

                                        1 Reply Last reply Reply Quote 0
                                        • Dan RathbunD Offline
                                          Dan Rathbun
                                          last edited by

                                          @thomthom said:

                                          Yea, got a wee bit lost... πŸ˜•

                                          I know (insert head-spinning emoticon here).

                                          Lets try these:
                                          A Simple Makefile Tutorial

                                          Makefile Tutorial

                                          I think the constant you want is DESTDIR or $(DESTDIR)

                                          I'm not here much anymore.

                                          1 Reply Last reply Reply Quote 0
                                          • thomthomT Offline
                                            thomthom
                                            last edited by

                                            πŸ‘

                                            Will have a look. Currently when I use nmake I get some warning about some of the compiler flags. Maybe I can eliminate them. I'd prefer that so there's less noise coming from the compiler. Easier to spot other warnings.

                                            ( That first link is sightly messed up though, as they didn't escape angle brackets inside the code examples: #include <hellomake.h> eaten by the browser - at least under Firefox.

                                            I've come across a partial documentation of mkmf: http://www.ensta-paristech.fr/~diam/ruby/online/ruby-doc-stdlib/libdoc/mkmf/rdoc/index.html

                                            Thomas Thomassen β€” SketchUp Monkey & Coding addict
                                            List of my plugins and link to the CookieWare fund

                                            1 Reply Last reply Reply Quote 0
                                            • 1
                                            • 2
                                            • 5
                                            • 6
                                            • 7
                                            • 8
                                            • 9
                                            • 8 / 9
                                            • First post
                                              Last post
                                            Buy SketchPlus
                                            Buy SUbD
                                            Buy WrapR
                                            Buy eBook
                                            Buy Modelur
                                            Buy Vertex Tools
                                            Buy SketchCuisine
                                            Buy FormFonts

                                            Advertisement