星期二, 十月 03, 2006

LuaCOM - more questions

LuaCOM - more questions

Click to flag this post

by Terry Bayne Jan 31, 2006; 09:26pm :: Rate this Message: Click to rate as Poor PostClick to rate as Below Average PostClick to rate as Average PostClick to rate as Above Average PostClick to rate as Excellent Post Click to clear rating - Use ratings to moderate (?)

Reply | Reply to Author | View Threaded | Link to this Message

Good Morning.

I've started using LuaCOM and I have a few questions. I am not a COM guru so please excuse my ignorance.

I am trying to build on the examples from the LuaCOM documentation, and in doing so I have no problem opening up Microsoft Word. The problem comes when I try to create a new document - most of the examples on the web do something like this:

word = luacom.CreateObject("Word.Application")
assert(word)
word.visible = true
-- Works good up to this point
doc = word.Documents.Add()

The last statement fails. I've tried passing parameters, even tried this:

word = luacom.CreateObject("Word.Application")
mt = luacom.CreateObject("type.missing")
assert(word)
word.visible = true
-- Works good up to this point
doc = word.Documents.Add(mt,mt,mt,mt)

All this gets me is a type mismatch error.

Any ideas?

Thanks
Terry


Re: LuaCOM - more questions

Click to flag this post

by Fabio Mascarenhas Jan 31, 2006; 10:08pm :: Rate this Message: Click to rate as Poor PostClick to rate as Below Average PostClick to rate as Average PostClick to rate as Above Average PostClick to rate as Excellent Post Click to clear rating - Use ratings to moderate (?)

Reply | Reply to Author | View Threaded | Link to this Message

Hi, Terry,

This:

> doc = word.Documents.Add()

should be this:

doc = word.Documents:Add()

Method calls use ':'. Reading and writing properties use '.'.

--
Fabio Mascarenhas

On 1/31/06, Terry Bayne <tbayne@...> wrote:
> Good Morning.
>
> I've started using LuaCOM and I have a few questions. I am not a COM guru so please excuse my ignorance.
>when I try to create a new document - most of the examples on the web
do >something like this:
>
> word = luacom.CreateObject("Word.Application")
> assert(word)
> word.visible = true
> -- Works good up to this point
> doc = word.Documents.Add()
>
> The last statement fails. I've tried passing parameters, even tried this:
> All this gets me is a type mismatch error.

LuaCOM - more questions

Click to flag this post

by Michael Cumming Jan 31, 2006; 11:01pm :: Rate this Message: Click to rate as Poor PostClick to rate as Below Average PostClick to rate as Average PostClick to rate as Above Average PostClick to rate as Excellent Post Click to clear rating - Use ratings to moderate (?)

Reply | Reply to Author | View Threaded | Link to this Message

Terry,

Its

doc = word.Documents:Add()

note the ':' not '.'

Mike

Re: LuaCOM - more questions

Click to flag this post

by Terry Bayne Feb 01, 2006; 12:10am :: Rate this Message: Click to rate as Poor PostClick to rate as Below Average PostClick to rate as Average PostClick to rate as Above Average PostClick to rate as Excellent Post Click to clear rating - Use ratings to moderate (?)

Reply | Reply to Author | View Threaded | Link to this Message

Fabio,

Thanks for spotting that, but still getting a type mismatch error:

LUA: Calling word.Documents:Add
Error executing lua code: [COM error:(E:\Blackdog\kibble\trunk\luacom\src\library\tLuaCOM.cpp,403):Type mismatch.]

Here is the lua code I am running:

word = luacom.CreateObject("Word.Application")
MT = luacom.CreateObject("type.missing")
assert(word)word.visible = true
print("Calling word.Documents:Add")
doc = word.Documents:Add()
print("Back from Documents:Add()")

Any ideas?

Also I have tried passing MT to the Add() call like so:

doc = word.Documents:Add(MT,MT,MT,MT)

Thanks

On Tue, 31 Jan 2006 12:08:11 -0200, Fabio Mascarenhas wrote:
>> Hi, Terry,
>>
>> This:
>>
>>>> doc = word.Documents.Add()
>>>>
>> should be this:
>>
>> doc = word.Documents:Add()
>>
>> Method calls use ':'. Reading and writing properties use '.'.
>>
>> --
>> Fabio Mascarenhas
>>
>> On 1/31/06, Terry Bayne <tbayne@...> wrote:
>>
>>>> Good Morning.
>>>>
>>>> I've started using LuaCOM and I have a few questions. I am not
>>>> a COM guru so please excuse my ignorance.
>>>> when I try to create a new document - most of the examples on
>>>> the web
>>>>
>> do >something like this:
>>
>>>> word = luacom.CreateObject("Word.Application") assert(word)
>>>> word.visible = true -- Works good up to this point doc =
>>>> word.Documents.Add()
>>>>
>>>> The last statement fails. I've tried passing parameters, even
>>>> tried this: All this gets me is a type mismatch error.


RE: LuaCOM - more questions

Click to flag this post

by Ignacio Burgueño Feb 01, 2006; 01:16am :: Rate this Message: Click to rate as Poor PostClick to rate as Below Average PostClick to rate as Average PostClick to rate as Above Average PostClick to rate as Excellent Post Click to clear rating - Use ratings to moderate (?)

Reply | Reply to Author | View Threaded | Link to this Message

Hi Terry. What version of LuaCOM are you using? Just tested your sample code
using luaCom 1.2 and Office 2003 and it worked fine.



> -----Original Message-----
> From: lua-bounces@...
> [mailto:lua-bounces@...] On Behalf Of Terry Bayne
> Sent: Tuesday, January 31, 2006 1:15 PM
> To: Lua list
> Subject: Re: LuaCOM - more questions
>
> Fabio,
>
> Thanks for spotting that, but still getting a type mismatch error:
>
> LUA: Calling word.Documents:Add
> Error executing lua code: [COM
> error:(E:\Blackdog\kibble\trunk\luacom\src\library\tLuaCOM.cpp
> ,403):Type mismatch.]
>
> Here is the lua code I am running:
>
> word = luacom.CreateObject("Word.Application")
> MT = luacom.CreateObject("type.missing")
> assert(word)word.visible = true
> print("Calling word.Documents:Add")
> doc = word.Documents:Add()
> print("Back from Documents:Add()")
>
> Any ideas?
>
> Also I have tried passing MT to the Add() call like so:
>
> doc = word.Documents:Add(MT,MT,MT,MT)
>
> Thanks

RE: LuaCOM - more questions

Click to flag this post

by Terry Bayne Feb 01, 2006; 01:41am :: Rate this Message: Click to rate as Poor PostClick to rate as Below Average PostClick to rate as Average PostClick to rate as Above Average PostClick to rate as Excellent Post Click to clear rating - Use ratings to moderate (?)

Reply | Reply to Author | View Threaded | Link to this Message

Ignacio,

Hi, thank you for taking the time to look at this. I am using LUACom 1.3 with Office 2003 and LUA 5.0.2.

Terry

On Tue, 31 Jan 2006 15:12:24 -0300, Ignacio Burgueño wrote:
>> Hi Terry. What version of LuaCOM are you using? Just tested your
>> sample code using luaCom 1.2 and Office 2003 and it worked fine.
>>
>>
>>>> -----Original Message-----
>>>> From: lua-bounces@...
>>>> [mailto:lua-bounces@...] On Behalf Of Terry
>>>> Bayne Sent: Tuesday, January 31, 2006 1:15 PM To: Lua list
>>>> Subject: Re: LuaCOM - more questions
>>>>
>>>> Fabio,
>>>>
>>>> Thanks for spotting that, but still getting a type mismatch
>>>> error:
>>>>
>>>> LUA: Calling word.Documents:Add
>>>> Error executing lua code: [COM
>>>> error:(E:\Blackdog\kibble\trunk\luacom\src\library\tLuaCOM.cpp
>>>> ,403):Type mismatch.]
>>>>
>>>> Here is the lua code I am running:
>>>>
>>>> word = luacom.CreateObject("Word.Application")
>>>> MT = luacom.CreateObject("type.missing")
>>>> assert(word)word.visible = true
>>>> print("Calling word.Documents:Add")
>>>> doc = word.Documents:Add()
>>>> print("Back from Documents:Add()")
>>>>
>>>> Any ideas?
>>>>
>>>> Also I have tried passing MT to the Add() call like so:
>>>>
>>>> doc = word.Documents:Add(MT,MT,MT,MT)
>>>>
>>>> Thanks


RE: LuaCOM - more questions

Click to flag this post

by Ignacio Burgueño Feb 01, 2006; 05:04am :: Rate this Message: Click to rate as Poor PostClick to rate as Below Average PostClick to rate as Average PostClick to rate as Above Average PostClick to rate as Excellent Post Click to clear rating - Use ratings to moderate (?)

Reply | Reply to Author | View Threaded | Link to this Message

Well. I compiled a debug version of luacom 1.3 (as of 2005-02-28) and it
does not work.
Indeed, the code fails when calling the Add method from the Word.Document
class
Its signature is:

HRESULT Add(
[in, optional] VARIANT* Template,
[in, optional] VARIANT* NewTemplate,
[in, optional] VARIANT* DocumentType,
[in, optional] VARIANT* Visible,
[out, retval] Document** prop);

I don't know if luacom 1.3 introduced a new approach to handle optional
parameters, but I think that the problem lies in the function
tLuaCOMTypeHandler::fillDispParams
At line 943, there's this code:

else if(!byref) // here we filter the optional out params (treated
below)
{
// assumes that a parameter is expected but has not been found

var.vt = VT_ERROR;
var.scode = DISP_E_PARAMNOTFOUND;
}

if(!byref || var.vt == VT_ERROR)
{
VariantCopy(&r_rgvarg[i], &var);
VariantClear(&var);
}

byref is true (it was set at line 911), and the parameter is [in] but it
seems that that case isn't handled properly. It should pass a Variant with
VT_ERROR and DISP_E_PARAMNOTFOUND.
I'm not quite sure of how to fix this properly.
Changing line 943 to this works fine:
else if(byref) // here we filter the optional out params (treated
below)
But I didn't check if that breaks other calls.

Regards,

Ignacio Burgueño
Desarrollo - Tecnolink S.A.
ignacio@...

Tel: +598 2 614-1003
www.inConcertCC.com


> -----Original Message-----
> From: lua-bounces@...
> [mailto:lua-bounces@...] On Behalf Of Terry Bayne
> Sent: Tuesday, January 31, 2006 2:45 PM
> To: Lua list
> Subject: RE: LuaCOM - more questions
>
> Ignacio,
>
> Hi, thank you for taking the time to look at this. I am
> using LUACom 1.3 with Office 2003 and LUA 5.0.2.
>
> Terry
>
> On Tue, 31 Jan 2006 15:12:24 -0300, Ignacio Burgueño wrote:
> >> Hi Terry. What version of LuaCOM are you using? Just tested your
> >> sample code using luaCom 1.2 and Office 2003 and it worked fine.
> >>
> >>
> >>>> -----Original Message-----
> >>>> From: lua-bounces@...
> >>>> [mailto:lua-bounces@...] On Behalf Of Terry
> >>>> Bayne Sent: Tuesday, January 31, 2006 1:15 PM To: Lua list
> >>>> Subject: Re: LuaCOM - more questions
> >>>>
> >>>> Fabio,
> >>>>
> >>>> Thanks for spotting that, but still getting a type mismatch
> >>>> error:
> >>>>
> >>>> LUA: Calling word.Documents:Add
> >>>> Error executing lua code: [COM
> >>>> error:(E:\Blackdog\kibble\trunk\luacom\src\library\tLuaCOM.cpp
> >>>> ,403):Type mismatch.]
> >>>>
> >>>> Here is the lua code I am running:
> >>>>
> >>>> word = luacom.CreateObject("Word.Application")
> >>>> MT = luacom.CreateObject("type.missing")
> >>>> assert(word)word.visible = true
> >>>> print("Calling word.Documents:Add")
> >>>> doc = word.Documents:Add()
> >>>> print("Back from Documents:Add()")
> >>>>
> >>>> Any ideas?
> >>>>
> >>>> Also I have tried passing MT to the Add() call like so:
> >>>>
> >>>> doc = word.Documents:Add(MT,MT,MT,MT)
> >>>>
> >>>> Thanks
>
>
>
>

RE: LuaCOM - more questions

Click to flag this post

by Shaun-7 Feb 01, 2006; 05:23am :: Rate this Message: Click to rate as Poor PostClick to rate as Below Average PostClick to rate as Average PostClick to rate as Above Average PostClick to rate as Excellent Post Click to clear rating - Use ratings to moderate (?)

Reply | Reply to Author | View Threaded | Link to this Message


> I don't know if luacom 1.3 introduced a new approach to handle optional
> parameters, but I think that the problem lies in the function
> tLuaCOMTypeHandler::fillDispParams
> At line 943, there's this code:

I had exactly the same problem and implemented a fix exactly like you
suggested.

I sent an email to the maintainer, Fabio Mascarenhas, at the time, but
don't think I ever heard anything back.

Cheers,
Shaun

RE: LuaCOM - more questions

Click to flag this post

by Terry Bayne Feb 01, 2006; 07:43am :: Rate this Message: Click to rate as Poor PostClick to rate as Below Average PostClick to rate as Average PostClick to rate as Above Average PostClick to rate as Excellent Post Click to clear rating - Use ratings to moderate (?)

Reply | Reply to Author | View Threaded | Link to this Message

That did seem to solve the problem! Thanks to both you and Shaun for your help!

Terry

On Tue, 31 Jan 2006 19:07:52 -0300, Ignacio Burgueño wrote:
>> Well. I compiled a debug version of luacom 1.3 (as of 2005-02-28)
>> and it does not work.
>> Indeed, the code fails when calling the Add method from the
>> Word.Document class Its signature is:
>>
>> HRESULT Add(
>> [in, optional] VARIANT* Template,
>> [in, optional] VARIANT* NewTemplate,
>> [in, optional] VARIANT* DocumentType,
>> [in, optional] VARIANT* Visible,
>> [out, retval] Document** prop);
>>
>> I don't know if luacom 1.3 introduced a new approach to handle
>> optional parameters, but I think that the problem lies in the
>> function tLuaCOMTypeHandler::fillDispParams At line 943, there's
>> this code:
>>
>> else if(!byref) // here we filter the optional out params (treated
>> below) {
>> // assumes that a parameter is expected but has not been found
>>
>> var.vt = VT_ERROR;
>> var.scode = DISP_E_PARAMNOTFOUND;
>> }
>>
>> if(!byref || var.vt == VT_ERROR)
>> {
>> VariantCopy(&r_rgvarg[i], &var);
>> VariantClear(&var);
>> }
>>
>> byref is true (it was set at line 911), and the parameter is [in]
>> but it seems that that case isn't handled properly. It should pass
>> a Variant with VT_ERROR and DISP_E_PARAMNOTFOUND. I'm not quite
>> sure of how to fix this properly. Changing line 943 to this works
>> fine:
>> else if(byref) // here we filter the optional out params (treated
>> below) But I didn't check if that breaks other calls.
>>
>> Regards,
>>
>> Ignacio Burgueño
>> Desarrollo - Tecnolink S.A.
>> ignacio@...
>>
>> Tel: +598 2 614-1003
>> www.inConcertCC.com
>>
>>
>>>> -----Original Message-----
>>>> From: lua-bounces@...
>>>> [mailto:lua-bounces@...] On Behalf Of Terry
>>>> Bayne Sent: Tuesday, January 31, 2006 2:45 PM To: Lua list
>>>> Subject: RE: LuaCOM - more questions
>>>>
>>>> Ignacio,
>>>>
>>>> Hi, thank you for taking the time to look at this. I am using
>>>> LUACom 1.3 with Office 2003 and LUA 5.0.2.
>>>>
>>>> Terry
>>>>
>>>> On Tue, 31 Jan 2006 15:12:24 -0300, Ignacio Burgueño wrote:
>>>>
>>>>>> Hi Terry. What version of LuaCOM are you using? Just tested
>>>>>> your sample code using luaCom 1.2 and Office 2003 and it
>>>>>> worked fine.
>>>>>>
>>>>>>
>>>>>>>> -----Original Message-----
>>>>>>>> From: lua-bounces@...
>>>>>>>> [mailto:lua-bounces@...] On Behalf Of
>>>>>>>> Terry Bayne Sent: Tuesday, January 31, 2006 1:15 PM To:
>>>>>>>> Lua list Subject: Re: LuaCOM - more questions
>>>>>>>>
>>>>>>>> Fabio,
>>>>>>>>
>>>>>>>> Thanks for spotting that, but still getting a type
>>>>>>>> mismatch error:
>>>>>>>>
>>>>>>>> LUA: Calling word.Documents:Add
>>>>>>>> Error executing lua code: [COM
>>>>>>>> error:(E:\Blackdog\kibble\trunk\luacom\src\library\tLuaCOM.cpp ,403):
>>>>>>>> Type mismatch.]
>>>>>>>>
>>>>>>>> Here is the lua code I am running:
>>>>>>>>
>>>>>>>> word = luacom.CreateObject("Word.Application")
>>>>>>>> MT = luacom.CreateObject("type.missing")
>>>>>>>> assert(word)word.visible = true
>>>>>>>> print("Calling word.Documents:Add")
>>>>>>>> doc = word.Documents:Add()
>>>>>>>> print("Back from Documents:Add()")
>>>>>>>>
>>>>>>>> Any ideas?
>>>>>>>>
>>>>>>>> Also I have tried passing MT to the Add() call like so:
>>>>>>>>
>>>>>>>> doc = word.Documents:Add(MT,MT,MT,MT)
>>>>>>>>
>>>>>>>> Thanks

没有评论: