Почему не может, “точка входа процедуры не могла быть расположена в dll”, когда я определенно вставил его?

Я сделал большое сравнение рабочих книг Excel в прошлом. Моя техника работает очень хорошо на рабочие книги со многими рабочими листами, но она только сравнивает содержание ячейки, не форматирование ячейки, макросы, и т.д. Кроме того, существует некоторое включенное кодирование, но это определенно стоит того, если необходимо сравнить много больших файлов неоднократно. Вот то, как это работает:

Запись А простая программа дампа, которая ступает через все рабочие листы и сохраняет все данные в разделенные от вкладки файлы. Создайте один файл на рабочий лист (используйте название рабочего листа в качестве имени файла, например, "MyWorksheet.tsv"), и создайте новую папку для этих файлов каждый раз, когда Вы запускаете программу. Назовите папку в честь имени файла Excel и добавьте метку времени, например, "20080922-065412-MyExcelFile". Я сделал это в Java, пользующемся библиотекой, названной JExcelAPI. Это действительно довольно легко.

B) Добавляют, что Windows окружает расширение для запущения новой программы Java от шага A при щелчке правой кнопкой по файлу Excel. Это делает очень легким запустить эту программу. Вам нужно к Google, как сделать это, но это столь же легко как запись *.reg файла.

C) Добираются BeyondCompare. Это имеет очень замечательную функцию для сравнения разграниченных данных путем показа, что это в хорошей таблице, видит снимок экрана .

D), Вы теперь готовы сравнить файлы Excel легко. Щелкните правой кнопкой по файлу 1 Excel и запустите свою программу дампа. Это создаст папку с одним файлом на рабочий лист. Щелкните правой кнопкой по файлу 2 Excel и запустите свою программу дампа. Это создаст вторую папку с одним файлом на рабочий лист. Теперь используйте BeyondCompare (до н.э) для сравнения папок. Каждый файл представляет рабочий лист, поэтому если будут различия в рабочем листе, то до н.э покажет это, и можно выполнить развертку и сделать сравнение файлов. До н.э покажет сравнение в хорошем расположении таблицы, и можно скрыть строки и столбцы, которыми Вы не интересуетесь.

6
задан Jordi 4 December 2009 в 09:26
поделиться

3 ответа

Я чувствую себя немного глупо, но я нашел ответ. Приложение (exe), которое я использовал, по-видимому, загрузило вторую, другую dll, которая зависела от той, что упоминалась в моем исходном сообщении. Эта вторая dll все еще ожидала старых функций, и ее также нужно было перекомпилировать с обновленной dll.

Большое спасибо людям, которые пытались мне здесь помочь!

1
ответ дан 9 December 2019 в 22:35
поделиться

Вы действительно используете __ declspec (dllexport) ? Я предполагаю, что нет - без этого объявления эта функция не будет экспортирована DLL (или, другими словами, программы, загружающие эту DLL, не будут иметь доступа к функциям без этого объявления).

Также попробуйте использовать Dependency Walker , чтобы узнать, какие именно функции ваша DLL сделала доступными.


Тот факт, что __ declspec (dllexport) не используется в объявлениях функций, это нормально - в большинстве случаев он будет используется только один раз в одном файле заголовка, например

#ifdef MAKING_DLL
#define FOO_API __declspec(dllexport)
#else
#define FOO_API
#endif

. Таким образом, если у вас есть #define MAKING_DLL перед этим разделом, все функции, объявленные как FOO_API int BakeACake () , будут быть экспортированным в зависимости от того, определен ли MAKING_DLL . Это' • нет стандартного двоичного интерфейса для C ++, что означает, что вы должны использовать один и тот же компилятор для построения программы и DLL, когда вы используете классы C ++ в DLL. Если можете, попробуйте перестроить программу в VS2008 или попробуйте перестроить DLL в той же версии VS, что и программа.

8
ответ дан 9 December 2019 в 22:35
поделиться

Загрузите dependency walker и откройте вашу dll с помощью этого инструмента. Он покажет список экспортированных функций из вашей dll. Проверьте, является ли указанный выше метод частью ожидаемых функций. Если это не так, значит, вы случайно удалили __ declspec (dllexport) для одного из классов в этой dll.

2
ответ дан 9 December 2019 в 22:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: