Библиотека C ++ работает в vb6, но не в c # - PullRequest
1 голос
/ 08 февраля 2010

Я пишу приложение на C #, которое должно использовать API-интерфейс C ++, предоставленный моим клиентом. Библиотека работает нормально, когда на нее ссылается приложение vb6, но когда я ссылаюсь на нее в своем приложении на c # и пытаюсь вызвать те же методы, я получаю другое (неправильное) поведение. Методы, которые я вызываю, принимают пару строковых аргументов. При условии, что у меня нет исходного кода библиотеки, я могу только догадываться, что может быть не так, и это приводит меня к следующей мысли: возможно ли, что библиотека могла быть разработана для вызова только из vb6? Я имею в виду, например, что можно ожидать, что строковые параметры будут закодированы определенным образом, отличным от того, который использует c #. Если так, есть ли обходной путь для этого? На данный момент лучшее, что я мог сделать, - это создать оболочку vb6 ocx, но это не изящное и не менее простое в развертывании решение.

Я публикую код, который инициализирует объект:


        ApiPrnClass apiprn;      // this is the class imported form the com reference
        for (int j = 0; j < 10; j++)
        {
            apiprn = new ApiPrnClass();  
            apiprn.FMGetModel(_TIPODISPOSITIVO.iDocument);
            apiprn.FMPRNFormat(_TIPODISPOSITIVO.iDocument, _TIPOFORMATO.DEL_CONDENSED, "");
            apiprn.PRNBeforePrint(_TIPODISPOSITIVO.iDocument, "");

            for (int i = 0; i < 10; i++)
            {

                string linea = "TEST C/ BUFF XXX-----------------------".Replace("XXX", (10 * j + i).ToString().PadLeft(3, '0'));
                apiprn.FMPrint(_TIPODISPOSITIVO.iDocument, linea);
            }


            apiprn.PRNAfterPrint(_TIPODISPOSITIVO.iDocument);
            System.Threading.Thread.Sleep(1000);

}

Буду признателен за любую помощь, Спасибо, Бернабе

1 Ответ

1 голос
/ 10 февраля 2010

Я не могу поверить в причину проблемы, я нашел это сам. Я понял, что библиотека работает нормально, когда вызывается из консольного приложения c #, но неправильно, когда используется из winforms (раньше я об этом не упоминал, это была библиотека, предназначенная для печати билета). Единственное различие, которое я знал между двумя типами приложений, заключается в том, что консольное приложение запускает поток, посвященный коду выполнения, в то время как winforms отправляется для проверки события qeue. Кажется, библиотека была настолько искажена, что не могла поддерживать это переключение. Поэтому я попытался вызвать библиотеку из приложения Windows, но в другом потоке .... и это сработало!

Спасибо за все ответы в любом случае, Бернабе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...