a little help with importing c library

Discussion in 'Ruby' started by Tea Figuric, Feb 27, 2007.

  1. Tea Figuric

    Tea Figuric Guest

    Hello,

    I am very new to Ruby, but I am giving it a try. If I am able to load
    the dll and call its functions, I will go into more detail. The .dll is
    created in VS2005 on XP os

    First of all, I used the search function of the forum, but I didn't find
    what I was looking for.
    After initial problems, my ruby script recognizes the library (if I
    remove the file, it complains).

    It's a C wrapper library for a C++ library that has just a few functions
    for now.

    I am stuck at the beginning :)
    My library is called qfinterface.dll and I would like to call the
    function CreateSession(const char *) that returns an int, and pass it a
    string.

    I mostly get the error "uninitialized constant" when trying to call the
    function, and I've tried so many different things, that I am losing
    track of what I tried and what not. right now I get "undefined local
    variable or method"

    this is my script sofar(in one of its versions):
    ------------------------------------------------------------

    require 'qfinterface'

    puts "hello"

    Qf = qfinterface.CreateSession("hd")

    def main()

    puts "hello"

    #QfInterface.CreateSession("sf")

    end

    main()

    -----------------------------------------------------

    would you please point me into right direction in how to call these
    classes.

    please let me know if you need further information.

    Thanks for your help!

    --
    Posted via http://www.ruby-forum.com/.
    Tea Figuric, Feb 27, 2007
    #1
    1. Advertising

  2. Tea Figuric

    Tea Figuric Guest

    I got it!!

    in case another lost soul needs it, here is how:

    require 'qfinterface'
    require 'Win32API'


    puts "hello"

    CreateSession = Win32API.new("qfinterface","CreateSession",["P"],"I")

    def main()

    puts "hello"
    check = CreateSession.call("mystring")

    end

    main()

    --
    Posted via http://www.ruby-forum.com/.
    Tea Figuric, Feb 28, 2007
    #2
    1. Advertising

  3. Tea Figuric

    Mat Schaffer Guest

    On Feb 27, 2007, at 6:24 PM, Tea Figuric wrote:
    > It's a C wrapper library for a C++ library that has just a few
    > functions
    > for now.
    >
    > I am stuck at the beginning :)
    > My library is called qfinterface.dll and I would like to call the
    > function CreateSession(const char *) that returns an int, and pass
    > it a
    > string.
    >
    > I mostly get the error "uninitialized constant" when trying to call
    > the
    > function, and I've tried so many different things, that I am losing
    > track of what I tried and what not. right now I get "undefined local
    > variable or method"


    I'm assuming you've read README.ext already?
    http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/RUBY/README.EXT?
    view=markup

    Have you investigated using the inline library? It might make more
    sense if you just need a few functions.
    http://www.zenspider.com/ZSS/Products/RubyInline/

    Using C from Ruby is a bit more complex than just regular ruby
    programming, but hopefully those links can get you started.
    -Mat
    Mat Schaffer, Feb 28, 2007
    #3
  4. Tea Figuric

    Tea Figuric Guest

    Mat Schaffer wrote:
    > On Feb 27, 2007, at 6:24 PM, Tea Figuric wrote:
    >
    > I'm assuming you've read README.ext already?
    > http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/RUBY/README.EXT?
    > view=markup
    >
    > Have you investigated using the inline library? It might make more
    > sense if you just need a few functions.
    > http://www.zenspider.com/ZSS/Products/RubyInline/
    >
    > Using C from Ruby is a bit more complex than just regular ruby
    > programming, but hopefully those links can get you started.
    > -Mat


    Thank you for your response Mat, I will look into the links.

    The library should be used by different scripting languages and
    languages, so it should be as generic as possible.


    In the meantime, I ran into a different problem, and I am having
    problems finding an answer to it.

    Since my C/C++ functions return only int, I have a function to which I
    pass a *buffer (as char*), and befferLength (as int), where the buffer
    should be populated inside of the function, and I have access to the
    value from the outside. something like int (or void) GetValue(char
    *buffer, int bufferLength);

    How do I pass a char* from ruby? is there something to convert from
    string to char * without having to change my C lib?

    Thanks again for your help!

    --
    Posted via http://www.ruby-forum.com/.
    Tea Figuric, Mar 2, 2007
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. ravi sankar
    Replies:
    2
    Views:
    377
    abdul bari
    Aug 27, 2003
  2. plb
    Replies:
    2
    Views:
    339
  3. ThaDoctor
    Replies:
    3
    Views:
    372
    Alan Woodland
    Sep 28, 2007
  4. Daniel
    Replies:
    1
    Views:
    200
    Bart van Ingen Schenau
    Jul 9, 2013
  5. Simon Hardy-Francis
    Replies:
    2
    Views:
    51
    Rustom Mody
    Mar 23, 2014
Loading...

Share This Page