none
Проблема с написанием dll RRS feed

  • Вопрос

  • Добрый день. Такая проблема: Есть две машины

    на 1 установлена 64-bit Windows, visual studio 2010, MS Access 2010 32 bit;

    на 2 установлена 64-bit Windows, visual studio 2010, MS Access 2010 64 bit

    На обеих машинах в Visual Basic создается и строится одинаковый простейший Com класс (один метод, один интерфейс) На обеих машинах в Access в ссылках и обозревателе  объектов созданный класс и его метод правильно видны. В обоих случаях с помощью new  создается экземпляра класса (соответствующая строка не вызывает ошибок) Однако, если на машине 1 при обращении к методу все работает нормально, то на машине 2 такая же операция вызывает ошибку 429 (невозможно создать ActiveX)

    Означает ли это что dll с COM-классами на VB в visual studio 2010 будут работать толко с 32 bit версией Access или где-то что-то упущено?

    19 января 2011 г. 12:25

Ответы

  • Я так и не нашел способ, как писать на VB.NET dll, которые работают  c 64-bit Access. Поэтому я был вынужден перейти на C#, там все работает нормально.

    • Помечено в качестве ответа Abolmasov Dmitry 28 января 2011 г. 12:33
    28 января 2011 г. 12:03

Все ответы

  • Visual Basic? Не VB.NET?

    Разработчка Visual Basic (последняя версия — 6.0) завершилась до выпуска первой x64-версии Windows. Все приложения, написанные на VB, запускаются в 32-битном процессе. Который не может найти 32-битных COM-объектов, экземпляры которых Вы создаете.

    Варианты:

    • использовать 32-битную версию Office;
    • использовать другую среду / язык разработки.
    19 января 2011 г. 13:04
  • Я использую тот, что входит в состав visual studio 2010 Professional. Он также не совместим с 64-bit версией Office?

    19 января 2011 г. 13:15
  • Visual Basic.NET совместим.

    COM-библиотеку создаете при помощи Tlbexp? Почитайте вот здесь о том, как создать 64-разрядную версию библиотеки.

    19 января 2011 г. 13:28
  • При построении, насколько я понимаю, кроме dll создается также соответствующий tlb и именно он указывается в references Access. Т.к. Windows 64bit, то по логике tlb скорее должен быть 64бита. Но с Tlbexp поэкспериментирую

    19 января 2011 г. 13:59
  • Когда в Visual Studio вы компилируете проект, в профиле компиляции у вас какой указан Target CPU? Может стоит попробовать там выбрать x64 или AnyCPU.

    Если вам поможет ответ Алексея Митева про Tlbexp.exe, то не забудьте нажать кнопку 'Пометить как ответ' на сообщении.

     


    Для связи [mail]
    20 января 2011 г. 9:05
  • Target CPU =  AnyCPU

    Использование tlbexp не дало результатов. Я удалял "родной" tlb и на его место ставил созданный (с ключом \win64 и без и из различных командных строк) - ничего не изменилось: с 32 бит Access все работает, а с 64 нет.  

    Если конечный ЦП установить х64 то при построении выдается ошибка "Файл My.dll не задает действительную сборку". При этом файл dll создается, а tlb нет. Если создать tlb файл для имеющегося dll   с помощью tlbexp то ошибка возникает в обоих случаях, как 64, так и 32 bit Access.

    при построении с конечным ЦП х86 все нормально, создаются файлы dll и tlb которые работают на 32 бит Access и не работают на 64 бит Access. Т.е. создается впечатление, что при построении всегда создается 32бит версия dll, независимо от типа ЦП и Windows 

    20 января 2011 г. 13:00
  • Я так и не нашел способ, как писать на VB.NET dll, которые работают  c 64-bit Access. Поэтому я был вынужден перейти на C#, там все работает нормально.

    • Помечено в качестве ответа Abolmasov Dmitry 28 января 2011 г. 12:33
    28 января 2011 г. 12:03