![]() |
XLL Internittently Fails to Load
I have a very simple XLL which I am trying to load in Excel 2007 on Windows
Vista. I have found that the problem occurs also in Excel 2003 on Vista, but not in 2007 on XP. More accurately, this problem is not 100% consistent, but occurs dramatically more often under Vista than under XP. Version of Excel does not seem to matter. When loading the XLL, I get a "The file you are trying to open, 'test_addxll.xll', is in a different format than specified by the file extension." error. Having used Dependency Walker to profile Excel while loading, I see that the sequence of events is as follows: Excel loads without resolving dependencies test_addxll.xll. Excel unloads test_addxll.xll. Excel loads without resolving dependencies test_addxll.xll. Excel checks for XlAutoOpen in test_addxll.xll. Excel unloads test_addxll.xll. Excel loads without resolving dependencies test_addxll.xll. Excel unloads test_addxll.xll. Excel loads without resolving dependencies test_addxll.xll. Excel checks for XlAutoOpen in test_addxll.xll. Excel unloads test_addxll.xll. Excel loads test_addxll.xll. DllMain in test_addxll.xll is called. test_addxll.xll is unloaded. LoadLibrary returns NULL, reporting an Invalid access to memory location (998) error. Specifically, LoadLibraryW ("C:\Users\rich\Documents\Calc4Web\test_addxll.xll ") called from "EXCEL.EXE" at address 0x2FF08667. Loaded "TEST_ADDXLL.XLL" at address 0x03440000. Successfully hooked module. DllMain (0x03440000, DLL_PROCESS_ATTACH, 0x00000000) in "TEST_ADDXLL.XLL" called. Unloaded "TEST_ADDXLL.XLL" at address 0x03440000. LoadLibraryW (C:\Users\rich\Documents\Calc4Web\test_addxll.xll" ) returned NULL. Error: Invalid access to memory location (998). This seems to indicate that an access violation is occurring inside DllMain. However, the DllMain is this: BOOL WINAPI DllMain (HANDLE hDLL, DWORD dwReason, LPVOID lpReserved) { switch (dwReason) { case DLL_PROCESS_ATTACH: break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: break; } return TRUE; } Further, while this error occurs consistently when the XLL is compiled using the MinGW toolkit (gcc 3.4.2, dlltool 2.16.91, dllwrap 2.16.91), I have not been able to produce the error if I compile the XLL using Visual Studio (98, 2003, or 2005). Additionally, by using a fake XLCALL32.DLL file that does not require Excel to be running, I was able to successfully load the XLL in a standalone C++ program (compiled with Visual Studio 2005). With more complex examples (the XLL statically linked to a DLL file statically linked to another DLL file, all compiled with MinGW), the same failure can occur, typically in one of the two DLL files. The same DLL files could be accessed via standalone C++ or VB6, but trying to access them via VB inside Excel failed much as loading the XLL fails. The problem only occurs when the library is loaded from within Excel. Again this problem does not occur when the XLL is compiled with Visual C++, but I need to be able to generate working add-ins using MinGW as well as using Visual C++. Does anybody have experience with a problem like this, or information on what we might do to solve it? If needed, I should be able to provide the XLL, the code for the XLL, and a Dependency Walker profile. |
All times are GMT +1. The time now is 07:50 PM. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com