At Thu, 09 Aug 2012 16:23:08 +0200, "murat demirtas" wrote: > Hello, > > during playing arround with the ffi/com package I try to do something like > that: > (require ffi/com) > (define cci "com-create-instance") > (define ProgID " MzCOM.MzObj") > (define mz (string-append cci ProgID)) > (eval mz) > but I get only the string.
Yes, in a read-eval-print loop, (eval "x") produces "x" because `eval' expects an S-expression not a string. You could use (eval (read (open-input-string "x"))) to parse a string to an S-expression and evaluate it. In contrast to the `eval' function, the Eval() method of MzCOM expects a string. Really, Eval() should be called ReadStringAndEval(). > Or something like this: > > (define (cci VAR PROGID) > (define VAR com-create-instance PROGID) > ) > I get :define: bad syntax (multiple expressions after identifier) in: (define > VAR com-create-instance PROGID) > > So I thing I understand something wrong here. Or is this what I am trying to > do > possible? The immediate error is that you're missing parentheses; you want (com-create-instance PROGID) instead of com-create-instance PROGID But you also seem to be able to pass a variable name into `cci' and have the `define' within `cci' bind it outside of `cci', and that won't work. Stepping back, I think you're confused about `eval' --- and that's fair, because a lot of people are confused about `eval' at first. For most people, the solution I recommend is to completely ignore `eval' and do things a better way. Unfortunately, since you're trying to use MzCOM, you really have to use `eval' in the form of Eval()... Have you seen this part of the documentation already? http://docs.racket-lang.org/guide/reflection.html I also wrote the following blog post about `eval' in an attempt to clarify some of the issues, but my impression is that few found it helpful. Just in case it works for you: http://blog.racket-lang.org/2011/10/on-eval-in-dynamic-languages-generally.html ____________________ Racket Users list: http://lists.racket-lang.org/users

