У меня есть два проекта в растворе:Как настроить решение для 32-разрядной winform, которая ссылается на 64-битную библиотеку классов?
MyWinForm
- это 32-битный проект с пользовательским пользователем управляет
MyClassLibrary
- это 64-битного проект, который требует 64-бит для математических операций
Я «принудительно» от Microsoft для создания пользовательских элементов управления, которые представляют собой 32-разрядные сборки. See here for reference
Я «вынужден» моей математической моделью требовать 64-битных математических операций.
Если я ссылаюсь на MyClassLibrary
в пределах MyWinForm
и поддерживаю его как 64-битную сборку, то мои математические операции завершаются успехом; однако я больше не могу использовать пользовательский элемент управления. Я получаю следующую ошибку, если попытаюсь: «Не удалось загрузить элемент панели инструментов, который будет удален», когда я попытаюсь перетащить мой пользовательский элемент управления на поверхность дизайнера.
Если я ссылаюсь на MyClassLibrary
в пределах MyWinForm
и поддерживаю его как 32-разрядную сборку, то мои математические операции завершаются с исключением OutOfMemory (из-за 32-разрядного ограничения максимального размера).
Как настроить мое решение, позволяющее ссылаться как на пользовательский элемент управления, так и на 64-разрядную библиотеку классов, избегая проблем?
Я действительно хотел бы иметь возможность использовать панель инструментов и поверхность дизайна. У меня есть подозрение, что мне нужно будет загрузить пользовательский элемент управления во время выполнения, чтобы динамический компилятор знал, как решить 32 или 64 бит. Это, по моему мнению, наносит ущерб использованию Visual IDE.
Вы не можете использовать библиотеку 64b в процессе 32b, так как библиотека загружается в пространство процесса, поэтому должно быть 32b – Gusman
Есть ли обходной путь? – sapbucket
Ну, при первом нечем прямо, но вы можете создать два отдельных процесса: один для 32b графического интерфейса и другие с 64-битными математическими классами и взаимодействовать с ними с tcp/pipe/shared memory, вы можете запустить 32b, который запускает невидимый процесс, а затем вы можете смешивать вещи. Совет, переполнение стека происходит потому, что нет стека слева, вы пытались увеличить размер стека на 32-битный процесс? – Gusman