| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Подключить к C# COM объект |
| Автор: lumenxp 9.4.2010, 06:51 | ||||
| Здравствуйте. Возможно вопрос и не сложный, но я не так давно знаком с С#. Как правильно подключить COM объект к С#. Использую VS2008. Вот пример из мануала
Подскажите что означает строка "private S7ProSim ps;" Далее для подключения функций в том же мануале производитель пишет
Но я так понял это код C++ и в C# он не совсем хорошо воспринимается. Во вложении мануал. |
| Автор: lumenxp 9.4.2010, 08:10 |
| Модификатор "private" запрещает доступ к полям и методам класса извне самого класса. С эти стало яснее. Как быть со строкой использования методов из COM объекта S7PROSIMLib??? |
| Автор: mrbrooks 9.4.2010, 08:30 |
| C# и платформа .NET. Библиотека программиста Троелсен Э. Глава 12. Взаимодействие с унаследованным программным кодом. так же:http://msdn.microsoft.com/en-us/library/sd10k43k%28VS.71%29.aspx |
| Автор: lumenxp 9.4.2010, 12:42 | ||||
| Еще раз повторюсь что совсем недавно работаю с C#. Ссылку на COM я добавил в самом начале. Я не знаю как изменить код
или
для того что бы С# это понял. Есть ли примеры? |
| Автор: lumenxp 10.4.2010, 10:44 | ||
| Порыскал и нашел примеры. Щас следующий косяк
Вот что выдал компилятор. ошибка CS0120: Для нестатического поля, метода или свойства "TestS7.TestS7App.ps" требуется ссылка на объект (Связанное местоположение) Help!!! |
| Автор: KelTron 10.4.2010, 12:17 | ||||
Либо:
|
| Автор: lumenxp 10.4.2010, 17:16 | ||
| Спасибо!!! Я дико извиняюсь но при усложнении кода возникли аналогичные ошибки
Теперь ругается на vData. |
| Автор: KelTron 11.4.2010, 06:52 |
| Функция Main статическая, это значит что в ней можно обращаться только к статическим членам класса, т.е. тебе нужно либо vData сделать статической переменной, либо создавать экземпляр в функции Main. Также как и S7ProSimClass ps. |
| Автор: lumenxp 12.4.2010, 09:43 | ||||
| Еще раз спасибо KelTron. Вобщем сделал как вы сказали
Такие извращения с методом необходимы для того что бы приготовленную мной dll-ку мог скушать матлаб. Подробнее я тут отписался http://forum.vingrad.ru/forum/topic-282027/anchor-entry2133591/15.html Возникла новая проблема CS1503: Аргумент "3": преобразование типа из "ref bool" в "ref object" невозможно Я делаю dll-ку на основании уже готового рабочего кода пиложения с экранной формой.
|
| Автор: KelTron 12.4.2010, 12:19 |
Не совсем так... Вообще я уже не понимаю где код, который ты используешь, везде разные куски какие то, приведи полный код, тогда уже можно будет что то сказать. |
| Автор: lumenxp 12.4.2010, 20:21 | ||||
| Извините за путаницу. Код который сейчас использую
Ошибка при данном коде CS1503: Аргумент "3": преобразование типа из "ref bool" в "ref object" невозможно Такое извращение с методами
необходимо для использования dll-ки в Matlab |
| Автор: KelTron 13.4.2010, 04:45 | ||||
Мне непонятно что вот это такое, в чём тут смысл?:
Такое попробуй:
|
| Автор: lumenxp 13.4.2010, 06:01 |
| Дело в том что параметр функции ps.WriteInputPoint под названием vData должен быть object. В противном случае компилятор говорит что Наиболее подходящий перегруженный метод для "S7PROSIMLib.S7ProSimClass.WriteInputPoint(int, int, ref object)" имеет несколько недопустимых аргументов Аргумент "3": преобразование типа из "ref bool" в "ref object" невозможно |
| Автор: KelTron 13.4.2010, 07:42 |
| Смотри код внимательней... |
| Автор: lumenxp 14.4.2010, 18:01 | ||||
| Еще раз спасибо! Простите за невнимательность, и за возможно глупые вопросы. Указанная вам конструкция действительно заработала. Я начал усложнять программу и вот что получилось
Ошибка компилятора
Дилитанская попытка вставить S7ProSimClass ps = new S7ProSimClass(); привела к компиляции, но метод так и не отработал. |
| Автор: Alkash 14.4.2010, 19:54 |
| Дык компилятор говорит - что он незнает что такое ps в SetBitOut(), соответственно определи его для всего класса |
| Автор: lumenxp 15.4.2010, 06:26 | ||||
При объявлении для всего класса, а именно
Получаем ошибку
|
| Автор: jonie 15.4.2010, 10:42 |
| у вас функция Connect статическая, и в ней вы обращаетесь к нестатическому члену ps. Либо делайте его статическим, либо функцию Connect НЕ статической |
| Автор: lumenxp 15.4.2010, 10:55 |
| Ни то ни другое я сделать не могу. Сделать ps статическим членом нельзя т.к. не будет работать обращение к подключенному COM объекту. Сделать функцию не статическо не могу т.к. с ней работает Матлаб. И еже она будет не статической он ничего не сможет сотворить. |
| Автор: jonie 15.4.2010, 11:42 | ||
ну хорошо, передавайте в Connect ссылку на Class1, и в функции уже раоботайте через неё. |
| Автор: lumenxp 15.4.2010, 11:45 |
| Да ничего я не вру! Пожалуйста приведите пример ссылки на класс, который должен отработать в данной конструкции. |
| Автор: jonie 15.4.2010, 22:50 | ||
но вы врете насчет того что ссылка на COM не может быть статической. |
| Автор: lumenxp 16.4.2010, 06:28 | ||
| Спасибо за ответ. Вот что мне выдал Matlab при попытке использовать метод Connect
Попытки что то изменить в коде не привели к работоспособности. |
| Автор: jonie 16.4.2010, 07:38 |
| lumenxp, а фиг его знает , как вы там указали сигнатуру.. |
| Автор: lumenxp 16.4.2010, 17:36 | ||
|
| Автор: jonie 16.4.2010, 20:51 |
| lumenxp, ну правильно, теперь у вас коннект ждет экземпляра класса Class1, сделайте его в матлабе и передайте как параметр... |
| Автор: lumenxp 17.4.2010, 06:49 |
| Пожалуйста более подробно опишите действия. Что значит сделать в Matlabe экземпляр класса? |