Создание DLL с очень большими файлами - PullRequest
2 голосов
/ 21 декабря 2011

Я впервые пишу на этом форуме, надеюсь, кто-нибудь мне поможет. Я искал в Интернете, но не нашел ответа, связанного с моим вопросом.

У меня есть очень большой файл (около 25000 строк) с тысячами определений, которые должны использоваться другим файлом

Все эти файлы (и еще около 600 из них) конвертируются в файлы .c с помощью специального инструмента. Я почти уверен, что это преобразование сделано правильно.

Если я создаю a.exe со всеми этими файлами, проблем нет, и все работает нормально. К сожалению, мне нужен DLL-файл, который вылетает при попытке получить доступ к очень большому файлу.

Я проверил, что его файл .obj больше 65 МБ, поэтому я добавил команду компилятора / bigobj, насколько я видел в Интернете, но это не решило проблему.

Я также проверил, что проблема возникает при доступе к большому файлу, потому что все работает нормально, когда я объединяю оба файла (что невозможно в моей разработке)

Я использую Visual 2008

Может ли это быть связано с компиляцией как кода C (/ TC) или C ++ (/ TP)? В чем разница между .exe и .dll, которая может привести к сбою моей программы?

Есть идеи, пожалуйста?

Заранее спасибо

1 Ответ

2 голосов
/ 26 декабря 2011

Действительно, без кода мало что можно сказать ... (хотя не уверен, хватит ли у кого-нибудь терпения прочитать 600 файлов, каждый из которых содержит 25 тыс. Строк кода :))

Как совет, пересоберите exe и dll в режиме отладки, запустите exe из MSVC, а затем установите точку останова, если вы знаете, что она дает сбой. Затем установите точку прерывания данных для переменной после того, как вы получите ее адрес из окна наблюдения. Предполагая, что приложение делает то, что должно правильно, указатель устанавливается, но теряется в пути; это означает, что это должно быть вызвано дважды. Или попробуйте проверить утверждение.

Другой сценарий - переменная переменная. Другой сценарий - значение возвращается из временного значения и теряется ... И последнее, но не менее важное: значение никогда не устанавливается из-за неправильных \ плохих условий ...

Если ваша проблема - сбой, а не пропущенное значение, просто сделайте нулевую проверку и верните вызов, если вы действительно хотите избежать осложнений, однако я бы порекомендовал вам выяснить, почему значение не установлено. Ваш выбор.

...