Error registering a DLL with regsvr32

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

Error registering a DLL with regsvr32

Don Rylander-3
Hello all, this is probably one for Andy or Blair, but it seems like it
might be related to some of the things that have been passing through the
newsgroup in the last few months.  I've included error log I get when I try
to register our DLL using regsvr32.  It looks like the unhappiness starts
somewhere around the SessionManager>>argv invocation.  I was a little
curious about the AXDllImageStripper business, though.   Hopefully, what's
going on will be more obvious to someone better versed in Dolphin's startup
processes.

TIA,

Don


************************** Dolphin Virtual Machine Dump Report
***************************

20:19:06 PM, 8/9/2004: UndefinedObject does not understand #value

*----> VM Context <----*
Process: {00DD0004:size 248 words, suspended frame 00DD03F1, priority 8,
callbacks 0
last failure 0:nil, FPE mask 3, thread nil}
Active Method: SessionManager>>logError:
IP: 00BADC7D (13)
SP: 00DD0490
BP: 00DD0468 (265)
ActiveFrame: {00DD046C: cf 00DD0451, sp 00DD0480, bp 00DD0468, ip 5,
TimeEntryDllSessionManager(SessionManager)>>logError:}
 receiver: a TimeEntryDllSessionManager
 arg[0]: a MessageNotUnderstood


New Method: VMLibrary>>dump:path:stackDepth:walkbackDepth:
Message Selector: #dump:path:stackDepth:walkbackDepth:

*----> Stack Back Trace <----*
{00DD046C: cf 00DD0451, sp 00DD0480, bp 00DD0468, ip 5,
TimeEntryDllSessionManager(SessionManager)>>logError:}
 receiver: a TimeEntryDllSessionManager
 arg[0]: a MessageNotUnderstood

{00DD0450: cf 00DD0435, sp 00DD0460, bp 00DD044C, ip 4,
TimeEntryDllSessionManager(SessionManager)>>unhandledException:}
 receiver: a TimeEntryDllSessionManager
 arg[0]: a MessageNotUnderstood

{00DD0434: cf 00DD0419, sp 00DD0444, bp 00DD0430, ip 4,
TimeEntryDllSessionManager(SessionManager)>>onUnhandledError:}
 receiver: a TimeEntryDllSessionManager
 arg[0]: a MessageNotUnderstood

{00DD0418: cf 00DD0401, sp 00DD0428, bp 00DD0418, ip 5,
MessageNotUnderstood(Error)>>defaultAction}
 receiver: a MessageNotUnderstood

{00DD0400: cf 00DD03ED, sp 00DD0410, bp 00E5F2B0, ip 57,
MessageNotUnderstood(Exception)>>_propagateFrom:}
 receiver: a MessageNotUnderstood
 arg[0]: a ExceptionHandler
 temp[0]: nil
 temp[1]: a ExceptionHandler
 temp[2]: nil
 temp[3]: a Process('Main' base 00DD0000 [ACTIVE] in
SessionManager>>logError: sp=00000000 ip=8 list=nil)
 temp[4]: nil

{00DD03EC: cf 00DD03D1, sp 00DD03FC, bp 00DD03E8, ip 6,
MessageNotUnderstood(Exception)>>_propagate}
 receiver: a MessageNotUnderstood
 temp[0]: nil

{00DD03D0: cf 00DD03B9, sp 00DD03E0, bp 00DD03D0, ip 12,
MessageNotUnderstood(Exception)>>signal}
 receiver: a MessageNotUnderstood

{00DD03B8: cf 00DD0399, sp 00DD03C8, bp 00DD03B0, ip 13,
MessageNotUnderstood class>>receiver:message:}
 receiver: MessageNotUnderstood
 arg[0]: nil
 arg[1]: Message selector: #value arguments: a Array

{00DD0398: cf 00DD037D, sp 00DD03A8, bp 00DD0394, ip 5,
UndefinedObject(Object)>>doesNotUnderstand:}
 receiver: nil
 arg[0]: Message selector: #value arguments: a Array

{00DD037C: cf 00DD0361, sp 00DD038C, bp 00E5F240, ip 25, [] in
TimeEntryDllSessionManager(SessionManager)>>argv}
 receiver: a TimeEntryDllSessionManager
 temp[0]: a CRTLibrary
 temp[1]: nil

{00DD0360: cf 00DD0345, sp 00DD0378, bp 00E5F278, ip 18, [] in
StructureArray(ExternalArray)>>collect:}
 receiver: a StructureArray
 arg[0]: [] @ 22 in SessionManager>>argv
 temp[0]: a Array
 temp[1]: 1
 temp[2]: nil

{00DD0344: cf 00DD031D, sp 00DD035C, bp 00DD0334, ip 16,
StructureArray(ExternalArray)>>uncheckedFrom:to:keysAndValuesDo:}
 receiver: a StructureArray
 arg[0]: 1
 arg[1]: 3
 arg[2]: [] @ 11 in ExternalArray>>collect:
 temp[0]: 1

{00DD031C: cf 00DD02F9, sp 00DD032C, bp 00DD0310, ip 24,
StructureArray(ExternalArray)>>from:to:keysAndValuesDo:}
 receiver: a StructureArray
 arg[0]: 1
 arg[1]: 3
 arg[2]: [] @ 11 in ExternalArray>>collect:

{00DD02F8: cf 00DD02DD, sp 00DD0308, bp 00DD02F4, ip 8,
StructureArray(ExternalArray)>>keysAndValuesDo:}
 receiver: a StructureArray
 arg[0]: [] @ 11 in ExternalArray>>collect:

{00DD02DC: cf 00DD02C9, sp 00DD02EC, bp 00E5F278, ip 21,
StructureArray(ExternalArray)>>collect:}
 receiver: a StructureArray
 arg[0]: [] @ 22 in SessionManager>>argv
 temp[0]: a Array
 temp[1]: 1
 temp[2]: nil

{00DD02C8: cf 00DD02B5, sp 00DD02D8, bp 00E5F240, ip 27,
TimeEntryDllSessionManager(SessionManager)>>argv}
 receiver: a TimeEntryDllSessionManager
 temp[0]: a CRTLibrary
 temp[1]: nil

{00DD02B4: cf 00DD02A1, sp 00DD02C4, bp 00E5F208, ip 9,
TimeEntryDllSessionManager(SessionManager)>>cmdLineFlags}
 receiver: a TimeEntryDllSessionManager
 temp[0]: nil

{00DD02A0: cf 00DD0289, sp 00DD02B0, bp 00DD02A0, ip 3,
TimeEntryDllSessionManager(GUISessionManager)>>tertiaryStartup}
 receiver: a TimeEntryDllSessionManager

{00DD0288: cf 00DD0275, sp 00DD0298, bp 00E5F198, ip 65, [] in
TimeEntryDllSessionManager(SessionManager)>>onStartup:}
 receiver: a TimeEntryDllSessionManager
 arg[0]: a Array

{00DD0274: cf 00DD0255, sp 00DD0284, bp 00DD026C, ip 7,
BlockClosure>>ensure:}
 receiver: [] @ 55 in SessionManager>>onStartup:
 arg[0]: [] @ 63 in SessionManager>>onStartup:
 temp[0]: a IPDolphin

{00DD0254: cf 00DD0239, sp 00DD0264, bp 00E5F198, ip 67, [] in
TimeEntryDllSessionManager(SessionManager)>>onStartup:}
 receiver: a TimeEntryDllSessionManager
 arg[0]: a Array

{00DD0238: cf 00DD0225, sp 00DD0250, bp 00E5F1D0, ip 17,
BlockClosure>>ifCurtailed:}
 receiver: [] @ 46563334 in nil
 arg[0]: [] @ 77 in SessionManager>>onStartup:
 temp[0]: nil
 temp[1]: nil
 temp[2]: nil

{00DD0224: cf 00DD0205, sp 00DD0234, bp 00DD021C, ip 4,
BlockClosure>>ensure:}
 receiver: [] @ 35 in SessionManager>>onStartup:
 arg[0]: [] @ 77 in SessionManager>>onStartup:
 temp[0]: nil

{00DD0204: cf 00DD01F1, sp 00DD0214, bp 00E5F198, ip 86,
TimeEntryDllSessionManager(SessionManager)>>onStartup:}
 receiver: a TimeEntryDllSessionManager
 arg[0]: a Array

{00DD01F0: cf 00DD01D5, sp 00DD0200, bp 00DD01EC, ip 11,
ProcessorScheduler>>onStartup:}
 receiver: a ProcessorScheduler
 arg[0]: a Array

{00DD01D4: cf 00DD01B9, sp 00DD01E4, bp 00E5F128, ip 11, [] in
ProcessorScheduler>>vmi:list:no:with:}
 receiver: a ProcessorScheduler
 arg[0]: 380
 arg[1]: nil
 arg[2]: 8
 arg[3]: a Array

{00DD01B8: cf 00DD01A5, sp 00DD01D0, bp 00E5F160, ip 17,
BlockClosure>>ifCurtailed:}
 receiver: [] @ 46563334 in nil
 arg[0]: [] @ 16 in ProcessorScheduler>>vmi:list:no:with:
 temp[0]: nil
 temp[1]: nil
 temp[2]: nil

{00DD01A4: cf 00DD0181, sp 00DD01B4, bp 00E5F128, ip 20,
ProcessorScheduler>>vmi:list:no:with:}
 receiver: a ProcessorScheduler
 arg[0]: 380
 arg[1]: nil
 arg[2]: 8
 arg[3]: a Array

{00DD0180: cf 00DD015D, sp 00DD01A0, bp 00DD0174, ip 47,
AXDllImageStripper(ImageStripper)>>snapshot:}
 receiver: a AXDllImageStripper
 arg[0]: 'C:\Documents and Settings\rylander\My Documents\Dolphin Smalltalk
5.1\\rB\Ford Consulting Group\tB\\TimeEntry\TimeEntry2.tmp'
 temp[0]: a TimeEntryDllSessionManager
 temp[1]: 6

{00DD015C: cf 00DD0149, sp 00DD016C, bp 00E587B8, ip 15,
AXDllImageStripper(ImageStripper)>>saveExecutable:}
 receiver: a AXDllImageStripper
 arg[0]: 'C:\Documents and Settings\rylander\My Documents\Dolphin Smalltalk
5.1\\rB\Ford Consulting Group\tB\\TimeEntry\TimeEntry2.dll'
 temp[0]: 'C:\Documents and Settings\rylander\My Documents\Dolphin Smalltalk
5.1\\rB\Ford Consulting Group\tB\\TimeEntry\TimeEntry2.tmp'
 temp[1]: nil
 temp[2]: true
 temp[3]: nil
 temp[4]: nil

{00DD0148: cf 00DD0131, sp 00DD0158, bp 00DD0148, ip 6,
MessageSend(MessageSendAbstract)>>value}
 receiver: a MessageSend

{00DD0130: cf 00DD0109, sp 00DD0140, bp 00DD0120, ip 44,
InputState>>loopWhile:}
 receiver: a InputState
 arg[0]: [] @ 6 in InputState>>mainLoop
 temp[0]: a MSG
 temp[1]: true
 temp[2]: a MessageSend

{00DD0108: cf 00DD00F5, sp 00DD0118, bp 00E558F0, ip 12,
InputState>>mainLoop}
 receiver: a InputState

{00DD00F4: cf 00DD00E1, sp 00DD0104, bp 00DCFB70, ip 13, [] in
InputState>>forkMain}
 receiver: a InputState

{00DD00E0: cf 00DD00CD, sp 00DD00F0, bp 00E5C8F8, ip 11,
ExceptionHandler(ExceptionHandlerAbstract)>>markAndTry}
 receiver: a ExceptionHandler
 temp[0]: nil

{00DD00CC: cf 00DD00B1, sp 00DD00DC, bp 00E52C50, ip 21, [] in
ExceptionHandler(ExceptionHandlerAbstract)>>try:}
 receiver: a ExceptionHandler
 arg[0]: [] @ 8 in InputState>>forkMain
 temp[0]: nil
 temp[1]: nil
 temp[2]: a Process('Main' base 00DD0000 [ACTIVE] in
SessionManager>>logError: sp=00000000 ip=8 list=nil)

{00DD00B0: cf 00DD009D, sp 00DD00C8, bp 00E5E650, ip 17,
BlockClosure>>ifCurtailed:}
 receiver: [] @ 46563334 in nil
 arg[0]: [] @ 34 in ExceptionHandlerAbstract>>try:
 temp[0]: nil
 temp[1]: nil
 temp[2]: nil

{00DD009C: cf 00DD007D, sp 00DD00AC, bp 00DD0094, ip 4,
BlockClosure>>ensure:}
 receiver: [] @ 15 in ExceptionHandlerAbstract>>try:
 arg[0]: [] @ 34 in ExceptionHandlerAbstract>>try:
 temp[0]: nil

{00DD007C: cf 00DD0069, sp 00DD008C, bp 00E52C50, ip 39,
ExceptionHandler(ExceptionHandlerAbstract)>>try:}
 receiver: a ExceptionHandler
 arg[0]: [] @ 8 in InputState>>forkMain
 temp[0]: nil
 temp[1]: nil
 temp[2]: a Process('Main' base 00DD0000 [ACTIVE] in
SessionManager>>logError: sp=00000000 ip=8 list=nil)

{00DD0068: cf 00DD0049, sp 00DD0078, bp 00DD0060, ip 7,
BlockClosure>>on:do:}
 receiver: [] @ 8 in InputState>>forkMain
 arg[0]: ProcessTermination
 arg[1]: [] @ 12 in BlockClosure>>newProcess

{00DD0048: cf 00000001, sp 00DD0058, bp 00E5C868, ip 17, [] in
BlockClosure>>newProcess}
 receiver: [] @ 8 in InputState>>forkMain
 temp[0]: nil

<Bottom of stack>

***** End of dump *****


Reply | Threaded
Open this post in threaded view
|

Re: Error registering a DLL with regsvr32 - solution or workaround?

Don Rylander-3
With a night's rest and more time to think and investigate, I've come up
with what appears to be a solution to this.  Giving my SessionManager
subclass a #tertiaryStartup method with a 1-second delay (before a call to
super) seems to eliminate the problem.

When I registered the DLL using regsvr32, the DLL popped up a message box
saying "UndefinedObject does not understand #value" (which appears to happen
in SessionManager>>argv, which was getting invoked indirectly in
GUISessionManager>>tertiaryStartup).  Behind that is the message box from
regsvr32 saying that registration completed successfully.  If you click OK
on the regsvr32 message box, both message boxes go away.

1 - it only happens when regsvr32 runs against it
2 - regsvr32 itself is successful; everything's properly registered

I'm using Dolphin XP Pro 5.1.4 on Windows XP SP1.

It appears this isn't a new problem, since I noticed that older versions of
the DLL complain, too.  However, they don't have time to get a MessageBox
open.  Consequently, the only indication is a sound and, if you happen to
check, an error log.

Since this doesn't happen during a normal start-up when Outlook loads the
DLL, it seemed like the dll was simply getting shut down before it's
completed starting up.

Adding the following to my SessionManager subclass seems to have eliminated
the symptoms.

    tertiaryStartup
        Processor sleep: 1000.
        super tertiaryStartup

So a couple of questions remain:

    1 - It works, but is this close enough to an actual solution?
    2 - What is all AXDllImageStripper stuff below?  Just detritus from the
build process?

Hopefully, this will help someone else who has an affinity for running into
obscure problems.  Of course, comments from anyone with a better
understanding of this than I have are always appreciated.

Thanks,

Don


Reply | Threaded
Open this post in threaded view
|

Re: Error registering a DLL with regsvr32 - solution or workaround?

Blair McGlashan-3
"Don Rylander" <[hidden email]> wrote in
message news:[hidden email]...
> With a night's rest and more time to think and investigate, I've come up
> with what appears to be a solution to this.  Giving my SessionManager
> subclass a #tertiaryStartup method with a 1-second delay (before a call to
> super) seems to eliminate the problem.
>
> When I registered the DLL using regsvr32, the DLL popped up a message box
> saying "UndefinedObject does not understand #value" (which appears to
happen

> in SessionManager>>argv, which was getting invoked indirectly in
> GUISessionManager>>tertiaryStartup).  Behind that is the message box from
> regsvr32 saying that registration completed successfully.  If you click OK
> on the regsvr32 message box, both message boxes go away.
>
> 1 - it only happens when regsvr32 runs against it
> 2 - regsvr32 itself is successful; everything's properly registered
>
> I'm using Dolphin XP Pro 5.1.4 on Windows XP SP1.
>
> It appears this isn't a new problem, since I noticed that older versions
of
> the DLL complain, too.  However, they don't have time to get a MessageBox
> open.  Consequently, the only indication is a sound and, if you happen to
> check, an error log.
>
> Since this doesn't happen during a normal start-up when Outlook loads the
> DLL, it seemed like the dll was simply getting shut down before it's
> completed starting up.
>
> Adding the following to my SessionManager subclass seems to have
eliminated
> the symptoms.
>
>     tertiaryStartup
>         Processor sleep: 1000.
>         super tertiaryStartup
>
> So a couple of questions remain:
>
>     1 - It works, but is this close enough to an actual solution?

No, not really. The problem stems from using a GUISessionManager (presumably
your own subclass) for a DLL. The DLL should not be attempting to access the
command line flags at all. I think you should override #tertiaryStartup to
just invoke #basicTertiaryStartup.

>     2 - What is all AXDllImageStripper stuff below?  Just detritus from
the
> build process?

Yes. When an image starts up, it runs initially on the Process that was
executing when the image snapshot was made, i.e. it just continues from
where it suspended itself as a saved image.

Regards

Blair


Reply | Threaded
Open this post in threaded view
|

Re: Error registering a DLL with regsvr32 - solution or workaround?

Don Rylander-3
"Blair McGlashan" <[hidden email]> wrote in message
news:[hidden email]...
> "Don Rylander" <[hidden email]> wrote in
> message news:[hidden email]...
[...]
> >     1 - It works, but is this close enough to an actual solution?
>
> No, not really. The problem stems from using a GUISessionManager
(presumably
> your own subclass) for a DLL. The DLL should not be attempting to access
the
> command line flags at all. I think you should override #tertiaryStartup to
> just invoke #basicTertiaryStartup.

Well that makes sense.  Yes, this is my very own special session manager to
allow the creation of an in-process Outlook add-in with its own UI.

In my case I also had to override #applicationName, which also invoked
#argv.  I just replaced it with the filename split from the image path.

Now it seems to work properly.

Thanks again,

Don

[...]
> Regards
>
> Blair
>
>


Reply | Threaded
Open this post in threaded view
|

Re: Error registering a DLL with regsvr32 - solution or workaround?

talios@gmail.com
Don Rylander wrote:

> Well that makes sense.  Yes, this is my very own special session manager to
> allow the creation of an in-process Outlook add-in with its own UI.

Hi Don, interesting - this wee project I'm embarking on is also an
Outlook add-in.  So far I've just been toying with an out-of-process exe
which just seems to crash and hang Outlook, so just started looking at
going the in-process dll route.  ( still learning my way around Dolphin
as well thou ).

The hanging of Outlook non withstanding, simply getting a button added
to the outlook control bars is seeming to be a pain.

Mark


Reply | Threaded
Open this post in threaded view
|

Re: Error registering a DLL with regsvr32 - solution or workaround?

talios@gmail.com
Mark Derricutt wrote:

> The hanging of Outlook non withstanding, simply getting a button added
> to the outlook control bars is seeming to be a pain.

Well, that works, simple error.  Now just to get this actually working
properly..