Я написал очень простой файл xll в VC ++ 2010, и Excel, который я использую, — это Excel 2007. Библиотека содержит только одну функцию:
extern "C" LPXLOPER12 WINAPI tsMkErr() {
static XLOPER12 x;
x.xltype = xltypeErr;
x.val.err = xlerrNull;
return &x;
}
и необходимая функция xlAutoOpen. Я скомпилировал и dll файл, изменил имя на xll и дважды щелкнул по нему, чтобы открыть в Excel. Все работает так, как я ожидал.
Тем не менее, если я пытаюсь открыть этот файл на другом компьютере, Excel просто продолжает мне сообщать, что:
Файл, который вы пытаетесь открыть, ‘.xll’, имеет другой формат, чем указано в расширении файла. Перед открытием файла убедитесь, что файл не поврежден и поступил из надежного источника. Вы хотите открыть файл сейчас?
Когда я нажимаю да, мусор выскакивает.
Я также пытался загрузить его через диспетчер надстроек. В этом случае я могу открыть файл, но не могу найти свою функцию tsMkErr ().
Буду благодарен всем предложениям …
Кстати, я не знаю, как выбрать ответ в качестве ответа. Если вы знаете, как это сделать, пожалуйста, дайте мне знать 🙂
… Я собираюсь опубликовать свой инструмент на этой неделе … теперь я только что понял, что он работает только на моем компьютере … пожалуйста, помогите … T_T
Сделай себе одолжение и пользуйся http://xll.codeplex.com.
Основными причинами являются:
вы пытаетесь открыть xll с неверной архитектурой (например, 32-битный xll с Excel 64-битной)
некоторые внешние dll отсутствуют (см. инструмент Ходок зависимости)
Обратите внимание, что если вы строите в режиме отладки и пытаетесь открыть его через Visual Studio, в этом случае ваша переменная пути к среде может быть недоступна, и в xll отсутствуют некоторые библиотеки DLL.
Возможная причина может быть отсутствие зависимостей (CRT DLL и т. Д.). Вы можете проверить, используя инструмент Dependency Walker.
Похоже, вы строите решение в отлаживать Режим. Если вы строите решение в режиме отладки, Visual Studio связывает XLL с библиотекой отладки, которая редко устанавливается на другом компьютере. Поэтому убедитесь, что вы установили конфигурацию сборки на релиз и он должен работать на других компьютерах (если на них установлена обычная распространяемая библиотека ms c ++).