Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
37 / 31 / 5
Регистрация: 30.04.2014
Сообщений: 1,035

Совместимость dll библиотек - C# + WPF. x86 + x64

23.07.2018, 08:46. Показов 2168. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Собственно есть вопрос.

Написал dll - ку на C# winForms. Можно ли её будет подключать в программе, написанной на WPF (в dll используется вызов MESSAGEBOX.SHOW()).

Спрашиваю, потому что у клиентов может быть как C#, так и WPF .
Можно ли сделать универсальную, чтобы была работоспособна и на winForms и на WPF ?

Интересует также вопрос совместимости версий x86 и x64.
Если написать под x86, будет ли всегда совместимо с x64?
Какие преимущества даёт написание под x64?

Большое спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.07.2018, 08:46
Ответы с готовыми решениями:

Компиляция приложений под x64 и x86 ОС
Доброго времени суток. Возникла такая проблема: Работаю на двух компьютерах. На одном стоит 32 разрядная версия Windows, на другом -...

Быстродействие одинаковых программ x86 или x64
Добрый день! Если не брать ограничение в используемой оперативной памяти для x86, кто-нибудь замерял реальную разницу в...

Компиляция x86 и x64 (разные ссылки на библиотеки)
Допустим есть проект который надо компилировать в 32 и 64 разрядные сборки. Тут проблем нет. Проблема в следующем: 32х разрядная...

10
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
23.07.2018, 08:52
Цитата Сообщение от Khludenkov Посмотреть сообщение
Можно ли её будет подключать в программе, написанной на WPF
Можно.

Цитата Сообщение от Khludenkov Посмотреть сообщение
у клиентов может быть как C#, так и WPF
Чего?

Цитата Сообщение от Khludenkov Посмотреть сообщение
Интересует также вопрос совместимости версий x86 и x64.
Если написать под x86, будет ли всегда совместимо с x64?
Какие преимущества даёт написание под x64?
Библиотеки лучше собирать как AnyCPU, если нет объективных причин этого не делать.
1
Эксперт .NET
 Аватар для Usaga
14136 / 9356 / 1350
Регистрация: 21.01.2016
Сообщений: 35,167
23.07.2018, 08:54
Лучший ответ Сообщение было отмечено Khludenkov как решение

Решение

Цитата Сообщение от Khludenkov Посмотреть сообщение
что у клиентов может быть как C#, так и WPF .
WPF - это теперь отдельный язык программирования?))

Цитата Сообщение от Khludenkov Посмотреть сообщение
Если написать под x86, будет ли всегда совместимо с x64?
Совместимо не будет, но работать в ОС x64 будет.

Цитата Сообщение от Khludenkov Посмотреть сообщение
Какие преимущества даёт написание под x64?
Можно использовать больше памяти. Если не знаете и не понимаете зачем вам это, то используйте x86 или AnyCPU + Prefer 32 bit architecture
1
 Аватар для Wolflind
127 / 107 / 31
Регистрация: 17.03.2016
Сообщений: 445
Записей в блоге: 1
23.07.2018, 09:23
Цитата Сообщение от Khludenkov Посмотреть сообщение
Можно ли сделать универсальную, чтобы была работоспособна и на winForms и на WPF ?
можно даже в одном проекте использовать WPF и WinForm и элементы WPF на Form добавить или наоборот
1
37 / 31 / 5
Регистрация: 30.04.2014
Сообщений: 1,035
23.07.2018, 11:06  [ТС]
Сейчас я пробовал свою dll написанную на C# win forms.
Там есть своя форма.

Вызываю эту длл-ку в программе на wpf и пытаюсь показать её форму - пишет ошибка.

Добавлено через 45 секунд
Про WPF.
Там же свои, несовместимые с win forms компоненты?
0
 Аватар для Wolflind
127 / 107 / 31
Регистрация: 17.03.2016
Сообщений: 445
Записей в блоге: 1
23.07.2018, 11:09
Цитата Сообщение от Khludenkov Посмотреть сообщение
Там же свои, несовместимые с win forms компоненты?
да но есть специальный элемент для вывода WinForm элементов называется не помню как пару раз всего использовал
WinHost или что-то вроде того

Добавлено через 23 секунды
Цитата Сообщение от Khludenkov Посмотреть сообщение
Вызываю эту длл-ку в программе на wpf и пытаюсь показать её форму - пишет ошибка.
какая ошибка?
0
37 / 31 / 5
Регистрация: 30.04.2014
Сообщений: 1,035
23.07.2018, 11:45  [ТС]
Форма sf уже создана в конструкторе - через new().
Миниатюры
Совместимость dll библиотек - C# + WPF. x86 + x64  
0
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
23.07.2018, 11:50
Цитата Сообщение от Khludenkov Посмотреть сообщение
Форма sf уже создана в конструкторе - через new().
что такое sf?
1
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
23.07.2018, 11:50
Лучший ответ Сообщение было отмечено Khludenkov как решение

Решение

Цитата Сообщение от Khludenkov Посмотреть сообщение
Форма sf уже создана в конструкторе - через new().
Что такое cl и где оно инициализируется?
1
37 / 31 / 5
Регистрация: 30.04.2014
Сообщений: 1,035
23.07.2018, 12:26  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.Windows.Forms;
using System.Threading;
using System.IO;
 
 
 
namespace ClassLibrary1
{
    enum eCommands
    {
        eTest,
        eIncLED,
        eDecLED,
    }
    public class Class1
    {
        settingsForm sf;
        public SerialPort sp; 
        byte[] buff;
        int ledValue = 10;
 
 
        //  Constructor. Init all fields
        public Class1()
        {
            sf = new settingsForm();
            sf.setOwner(this);
            sp = new SerialPort();
            buff = new byte[1];
        }
 
 
        //  Increase LED value. Return LED value or -1 if error
        public int incLed()
        {
            if (sp.IsOpen)
            {
                buff[0] = 1;
                ++ledValue;
                sf.serialPort1.Write(buff, 0, (byte) eCommands.eIncLED);
                return ledValue;
            }
            else
            {
                return -1;
            }
        }
 
        //  Decrease LED value. Return LED value or -1 if error
        public int decLed()
        {
            if (sp.IsOpen)
            {
                buff[0] = 2;
                --ledValue;
                sf.serialPort1.Write(buff, 0, (byte) eCommands.eDecLED);
                return ledValue;
            }
            else
            {
                return -1;
            }
        }
 
 
        public int getLedVal()
        {
            return 10;
        }
 
        //  Function wait for events from COM port (blocking mode)
        public int waitSignal()
        {
            Thread.Sleep(10000);
            int a = sf.serialPort1.ReadByte();
            return a;
        }
 
        public bool setParamsDefault()
        {
            sp.BaudRate = 9600;
            sp.PortName = "COM1";
            return true;
        }
 
 
        //  Call set params form
        public bool setParamsManual()
        {
            sf.Show();
            return true;
        }
 
 
        //  read params from file and set thay
        public bool setParamsFromFile(string fileName)
        {
            using (StreamReader sr = File.OpenText(fileName))
            {
                string s = "";
                if ((s = sr.ReadLine()) != null)
                {
                    sp.PortName = s;
                }
                else
                {
                    MessageBox.Show("not set port name param!");
                }
 
                if ((s = sr.ReadLine()) != null)
                {
                    sp.BaudRate = Convert.ToInt32(s);
                }
                else
                {
                    MessageBox.Show("not set baud rate param!");
                }
 
                sr.Close();
            }
 
            return true;
        }
 
 
 
        //  General connect to any COM port. If already connected, return true
        public bool connect()
        {
            if (!sp.IsOpen)
            {
                sp.Open();
 
                if (sp.IsOpen)
                {
                    System.Windows.Forms.MessageBox.Show("Port " + sp.PortName + " is Open!");
                }
                else
                {
                    System.Windows.Forms.MessageBox.Show("Port " + sp.PortName + " not Open!");
                }
 
                return sp.IsOpen;
            }
            else
            {
                return true;
            }
        }
 
 
 
 
        //  Save settings params to file
        public bool saveParamsToFile(string fileName)
        {
            if (!File.Exists(fileName))
            {
                // Create a file to write to.
                using (StreamWriter sw = File.CreateText(fileName))
                {
                    sw.WriteLine(sp.PortName);
                    sw.WriteLine(sp.BaudRate.ToString());
                    sw.Close();
                }
            }
            return true;
        }
 
 
        //  Load settings from file
        public bool loadParams(string fileName)
        {
           return true;
        }
 
 
        //  Set default settings. To ram only. Not save to file. Use "saveParams"
        public bool setDefaultSett()
        {
            return true;
        }
 
 
        //  Disconnect from device. Cleanup all resources
        public bool disconnect()
        {
            if (sp.IsOpen)
            {
                sp.Close();
            }
 
            return sp.IsOpen;
        }
    }
}
Добавлено через 1 минуту
Спасибо!

Забыл!
C#
1
 cl = new Class1();
Добавлено через 42 секунды
Тему можно считать закрытой.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
23.07.2018, 12:41
Лучше покажите
Цитата Сообщение от nicolas2008 Посмотреть сообщение
Что такое cl и где оно инициализируется?
т.к. проблема в нем...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.07.2018, 12:41
Помогаю со студенческими работами здесь

Получаю объекты из реестра из секции для x64 вместо x86
Пробую получить объекты из реестра из секции SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall Получаю так string...

Как использовать DLL (x86) на AnyCPU (x64)
Доброго времени суток! Имеется задача, которая решается только на x86 сборке. Выход - *.dll файл (конечная платформа x86). Есть...

Изменение c x64 на x86
Здравствуйте, подскажите как в visual studio установить платформу x86 вместо x64???

Производительность x64 хуже x86
анализирую время доступа к элементам массива разными способами (безопасный. вложенный массив, unsafe). при использовании целевой платформы...

Возможно ли подключение x86 клиентов к WCF (x64)
Пожалуйста, помогите решить прроблему: Имеется WCF service (.NET4.5), который использует Native (С++) DLL-ки. Из-за этих DLL-ок...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru