![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
hyp1k |
|
||||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 3.4.2008 Репутация: нет Всего: нет |
Написал класс на vb.net, выгрузил его в dll. Попытки пользовать эту длл в проекте vb.net успешны, в C# не работает. Как такое может быть? Ведь, насколько мне известно, код переводится в промежуточный язык когда заносится в dll?!
код первого работает
Второй не работает
ПОЧЕМУ? |
||||
|
|||||
lomaster |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 27.5.2012 Репутация: нет Всего: 2 |
что значит не работает?
|
|||
|
||||
hyp1k |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 3.4.2008 Репутация: нет Всего: нет |
В vb.net проходит подключение и устанавливается значение, по нужному пути, при том отрабатывает быстро и четко. В C# программа подвисает, видимо не подключившись во второй строке, на 3 строке показывает ошибку, System.Runtime.InteropServices.COMException {"No Current Connection"}. Если развернуть информацию об исключении в студии в поле Source значение Serck.ScxV6Server. Т.е. я понимаю, да внутри моей библиотеки не прошло подключение, а член класса сервер в состоянии No Current Connection. Но это не важно, допустим я не знаю, что внутри библиотеки и как оно там работает, черный ящик. Должно работать везде.
Т.е. возможно, что отличается механизм передачи параметров из программ в функцию, это мой бред, не знаю о чем думать.. Добавлено через 2 минуты и 30 секунд Класс, выгруженный в dll
|
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
hyp1k, может дата неправильно парсится? Ты ведь поразному её парсишь? Метод парс по умолчанию ( если не ошибаюсь) использует американскую систему, то есть сначала пишется месяц, потом день, потом год. А при использовании конвертера вполне возможно, что используется культура системы.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
lomaster |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 27.5.2012 Репутация: нет Всего: 2 |
Нет, дело не в передаче параметров.
Скорее всего в параметрах данные идут не те. Проверяйте все ли одинаково отправляете. Ну и под дебагом смотрите что куда идет и где "зависает". Это сообщение отредактировал(а) lomaster - 20.11.2012, 15:35 |
|||
|
||||
hyp1k |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 3.4.2008 Репутация: нет Всего: нет |
lomaster,
Такая проблема не только у меня, человек пользуется библиотекой и говорит, что в шарпе не работает, а в вб работает. Первое предлрожение из его поста. Ошибка у него точно такая же. http://scadaforum.controlmicrosystems.com/...ord1=Connection передаю одинаково параметры :( diadiavova, CDate("20.11.2012 09:23:20").Ticks 634890002000000000 Long DateTime.Parse("20.11.2012 09:23:20").Ticks 634890002000000000 long вопрос больше к разработчикам, но работать должно без вопросов... Это сообщение отредактировал(а) hyp1k - 20.11.2012, 15:50 |
|||
|
||||
hyp1k |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 3.4.2008 Репутация: нет Всего: нет |
Вот когда я наткнулся на то, что библиотека произодителя в шарпе не работает, а в vb работает, я думал напишу обертку в vb, выгружу в длл и буду использовать в шарпе, оказалось все равно не пашет..
|
|||
|
||||
lomaster |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 27.5.2012 Репутация: нет Всего: 2 |
Что значит обертку и почему не сработало?
|
|||
|
||||
diadiavova |
|
||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Ну собственно я увидел различия в коде и предположил, что из-за них. ![]() А вообще, код на бейсике и на шарпе с виду идентичный совсем даже не обязательно должен на CIL генерировать одно и то же. У бейсика есть множество возможностей ( и ком-взаимодействие одна из областей, ради которых они введены в язык), благодаря которым можно код написать очень сокращенно там, где в шарпе надо все расписывать подробно. Нередко преимущества бейсика в таких ситуациях тут же исчезают, как только включишь режим строгой проверки типов (Option Strict On, по умолчанию он выключен). В данной ситуации, конечно же можно только гадать в чем именно проблема, поскольку вся картина не видна. Поэтому выскажу еще одно предположение: В методе SetValue есть следующий код
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
||||
|
|||||
hyp1k |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 3.4.2008 Репутация: нет Всего: нет |
Спасибо за комментарии. Сегодня под конец рабочего открыл IL коды обоих экзешников, они почти идентичны, впал еще в больший ступор. Завтра продолжу...
![]() |
|||
|
||||
lomaster |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 27.5.2012 Репутация: нет Всего: 2 |
Неужели нельзя проверить установлен конект или нет?
Обламывается у вас по всей видимости именно в Svr.Connect(ConnectionId, Name, Password). римерно как у этих товарищей - http://scadaforum.controlmicrosystems.com/...p;threadid=1240 |
|||
|
||||
hyp1k |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 3.4.2008 Репутация: нет Всего: нет |
lomaster, хорошая ссылка, вчера не нашел ее сам. Открыл их демо проект увидел атрибут [STAThread]. А как раз вчера под вечер смотрел IL коды, они тож отличались на строчку
.custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 ) и действительно рабочий код выглядит вот так:
Почему vb.net этот атрибут вставляется по умолчанию?! Осталось почитать и разобраться как влияет [STAThread] на подключение COM объектов. Спасибо за помощь! Это сообщение отредактировал(а) hyp1k - 21.11.2012, 09:31 |
|||
|
||||
lomaster |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 27.5.2012 Репутация: нет Всего: 2 |
|
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |