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.
    • thomthomT Offline
      thomthom
      last edited by

      πŸ‘ πŸ˜„

      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

        @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.

        Anyone know how to achieve this?

        Making it so that when I build and compile under Windows everything is placed in a "win32" folder and "osx" when using OSX?
        Or rather, to clarify, I know how to do conditionals - just don't know how to control where the generated files are output.

        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

          and you are compiling from the commandline, not from within the Visual Studio GUI interface, correct ?

          I'm not here much anymore.

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

            Currently using nmake that comes with MS VS C++.

            And I'm using a extconf.rb with mkfm to generate the makefile.

            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

              Is it possible to build an Ruby C Extension under Windows that doesn't require additional libraries? When using Visual C++ to build the extensions require the C++ runtime library.

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

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

                yes. my old example did that. best is to check the DLL imports section to see what functions it requires

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

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

                  @unknownuser said:

                  yes. my old example did that. best is to check the DLL imports section to see what functions it requires
                  Ah, the Pelles C project! Is it possible to use to to just compile the C source without creating a project? (just trying to find a solution without creating too many extra project files.)

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

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

                    @unknownuser said:

                    Is it possible to use to to just compile the C source without creating a project? (just trying to find a solution without creating too many extra project files

                    the .ppj file is just a collection of commands. you can easily convert it to a .bat file if you dont want to have extra files (remember to create the .def file for the .dll link)

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

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

                      Do you remember the cause of the C:\ruby\src\ruby-1.8.6-p111\missing.h(71): error #1050: Redefinition of macro 'isinf'. error? And can you explain what your workaround actually do?

                      Trying to set up a project myself so I actually understand this.

                      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

                        And why is the macro redefinition just a warning for this guy, but an error in Pelles C?
                        https://github.com/barrie0482/rrdruby_win32_build/wiki

                        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

                          hm... there is an msvcrt-ruby18.dll in the SketchUp folder - can I make my Visual Studio C++ project rely on this instead? So when the C Extension loads under SketchUp Ruby the runtime is there - installed by SketchUp. ??

                          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:

                            @unknownuser said:

                            And can you explain what your workaround actually do?

                            isinf is already defined in PellesC libraries so there is no need to include that file again.

                            But I am not including it myself - it's an error that comes from the Ruby missing.h file... :S

                            
                            Building hello_world.obj.
                            Use <stdlib.h> instead of non-standard <malloc.h>
                            C;\ruby\src\ruby-1.8.6-p111\missing.h(71); error #1050; Redefinition of macro 'isinf'.
                            *** Error code; 1 ***
                            Done.
                            
                            

                            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:

                              http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx - the DLL is already loaded by Sketchup so it will use that version.

                              When compiling with Pelles C, right? Any way to make VC++'s nmake rely on the bundled SketchUp CRT instead of the VSC++ CRT? (splitting my quest into two projects here...)

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

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

                                @unknownuser said:

                                And can you explain what your workaround actually do?

                                isinf is already defined in PellesC libraries so there is no need to include that file again.

                                http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx - the DLL is already loaded by Sketchup so it will use that version. also you can copy the msvcrt-ruby18.dll in your dev directory to be picked up when debugging outside Sketchup (which I hope you do, otherwise dev time is slooooow)

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

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

                                  @thomthom said:

                                  But I am not including it myself - it's an error that comes from the Ruby missing.h file... :S

                                  that's why you need to have #define HAVE_ISINF 1 in your code, so that Ruby will not double include

                                  @unknownuser said:

                                  Any way to make VC++'s nmake rely on the bundled SketchUp CRT instead of the VSC++ CRT? (splitting my quest into two projects here...)

                                  compile with the same VC πŸ˜„ or dont link any CRT and use a replacement static lib (there are some minimal libs on the net)

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

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

                                    @unknownuser said:

                                    compile with the same VC

                                    _MSC_VER == 1200 = MVC 6, right? Can you get hold of that version any more?

                                    @unknownuser said:

                                    or dont link any CRT and use a replacement static lib (there are some minimal libs on the net)

                                    Here you lost me. "linking"... another concept I need to learn.

                                    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

                                      That is still greek to me... The only thing I compiled before these Ruby C Extensions where Visual Basic 4 applications... πŸ˜’

                                      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:

                                        @unknownuser said:

                                        or dont link any CRT and use a replacement static lib (there are some minimal libs on the net)

                                        Here you lost me. "linking"... another concept I need to learn.

                                        As .. in statically linked, or dynamically linked.

                                        (Hence the DLL and dylib, means Dynamically Linked Library.)

                                        πŸ’­

                                        I'm not here much anymore.

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

                                          if you want to have fun - http://www.benshoof.org/blog/minicrt/

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

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

                                            @dan rathbun said:

                                            @thomthom said:

                                            @unknownuser said:

                                            or dont link any CRT and use a replacement static lib (there are some minimal libs on the net)

                                            Here you lost me. "linking"... another concept I need to learn.

                                            As .. in statically linked

                                            hmm... so I could take my C Extension made with VC++'s nmake and statically link the RT - avoiding having to bundle it or require the users to install any additional RT?

                                            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
                                            • 3
                                            • 4
                                            • 5
                                            • 8
                                            • 9
                                            • 3 / 9
                                            • First post
                                              Last post
                                            Buy SketchPlus
                                            Buy SUbD
                                            Buy WrapR
                                            Buy eBook
                                            Buy Modelur
                                            Buy Vertex Tools
                                            Buy SketchCuisine
                                            Buy FormFonts

                                            Advertisement