COM на 64-битной платформе - PullRequest
3 голосов
/ 17 мая 2011

Я использую стороннюю библиотеку COM с C #, все отлично работает на 32-битной XP. Я использую tlbimp, чтобы создать обертку, добавить ссылку все работы. Однако при портировании в нашу серверную среду, которая является 64-битной Windows Server 2008, я столкнулся с препятствием.

Код ниже работает правильно только тогда, когда я щелкаю правой кнопкой мыши и тестирую его, т.е. запускаю в среде VS. Код не работает при компиляции в консольное приложение, а также код не работает в сборке, будь то в тесте или вызывается из консольного приложения. В попытке заставить его работать, я работаю от имени администратора и в 32-битном командном окне - все еще ничего не всегда имеет значение null, и не выдается исключение, указывающее, что GrpSvr.GrpCall является допустимым именем библиотеки Com.

    string sMessage = "no grouper";
    GrpSvr.GrpCall grouper = Activator.CreateInstance(
        Type.GetTypeFromProgID("GrpSvr.GrpCall")) as GrpSvr.GrpCall;
    if (grouper != null)
        sMessage = grouper.GroupInit(@"C:\CmdGrp.txt", true, true);

    Console.WriteLine(sMessage);

Ответы [ 2 ]

3 голосов
/ 17 мая 2011

Попробуйте использовать COM + в качестве хоста и держите ваше приложение скомпилированным для 64 бит. Для получения дополнительной информации см эта ссылка

2 голосов
/ 17 мая 2011

Похоже, что сторонняя COM DLL является 32-битной. Вы должны настроить свое приложение так, чтобы оно работало только как 32-разрядные, вместо любого процессора.

...