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 ***** |
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 |
"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 > 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 |
"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 > > |
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 |
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.. |
Free forum by Nabble | Edit this page |