powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Подключение библиотеки .dll на C++ в проект C#
42 сообщений из 42, показаны все 2 страниц
Подключение библиотеки .dll на C++ в проект C#
    #38873018
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. у меня возникла проблема с подключением библиотеки c++ в c#, через referens пробовал, не получается. Тогда подключил через DllIport, но возникла проблема, у функций свои типы данных, прописанные в заголовочном файле (#define). Проблема в том, что я не знаю как их перевести в C#. Прилагаю архив в котором собственно и dll и заголовочный файл.
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38873020
ndbn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
#ifndef _u8
#define _u8  UINT8
#endif
#ifndef _s8
#define _s8  INT8
#endif
#ifndef _u16
#define _u16 UINT16
#endif
#ifndef _s16
#define _s16 INT16
#endif
#ifndef _u32
#define _u32 ULONG32
#endif
#ifndef _s32
#define _s32 INT32
#endif



http://stackoverflow.com/questions/24947123/does-c-sharp-have-int8-and-uint8
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38873040
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как я понял надо просто вместо _u8 писать соответствующий ему тип C#. ещё вопрос у процедур есть возвращаемое значение которое соответствует
Код: plaintext
1.
#define CI_BRD_NUMS      8

, насколько я понимаю в C# - это перечисление
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38873090
ndbn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikus, насколько я понимаю в C# - это перечисление
Константа вроде
Код: c#
1.
const CI_BRD_NUMS x = 8;
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38873093
ndbn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е.
Код: c#
1.
const CI_BRD_NUMS = 8;
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38873103
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ещё вопрос про DllImport. у меня подключается много функций, значит для каждой функции писать DllImport?
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38873105
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikusПроблема в том, что я не знаю как их перевести в C#
int'ы не проблема, структуры типа canboard_t больше трудностей вызовут
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38873132
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИзопропилdimasikusПроблема в том, что я не знаю как их перевести в C#
int'ы не проблема, структуры типа canboard_t больше трудностей вызовут
Я думал такие же структуры объявить, получается так не прокатит? подскажите как это можно сделать.
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38873149
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikusподскажите как это можно сделать.
https://msdn.microsoft.com/en-us/library/s9ts558h(v=vs.110).aspx
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38873180
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я прочитал, но не могу понять про "типы перечислений". для целочисленных какие типы?
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38873203
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikus,

перечисление это просто набор именованных констант
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38878407
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я вызываю функцию из dll, у меня вылетает ошибка "System.BadImageFormatException: Была сделана попытка загрузить программу, имеющую неверный формат."
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
 [DllImport("chai.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern short CiInit();
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {                
                CiInit();
            }
            catch (Exception g)
            {
                MessageBox.Show(g.ToString());
            }

        }


сама dll находится в папке с exe. Смотрел в MSDN, так понял что он не может связать управляемый код с неуправляемым. Подскажите ка исправить?
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38878684
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ау, кто-нибудь ответит?
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38878687
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dll 32 битная?

тогда и для c# укажи компиляцию в 32 бита
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38878697
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DLL 32 битная, написана на MS Visual C++ 2010 Express Edition. Библиотека предназначена для взаимодействия по CAN, на сайте разработчика она есть http://can.marathon.ru/page/prog/chai. А про разрядность проект, у меня раньше в студии можно было выбрать x32 и x64 а теперь тока AnyCPU. ОС Windows 8.1 x64. Читал на MSDN про AnyCPU - это как бы и для 32 и 64.
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38878719
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13.02.2015 8:44, dimasikus пишет:

> DLL 32 битная

> AnyCPU

> Windows 8.1 x64

Неужели до сих непонятно, в чём проблема ;)?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38878750
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38879073
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikus,

Собирай проект под конкретную платформу, а именно x86, а не AnyCPU или x64. Написали же выше, что библиотека 32-битная
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38879674
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я же писал что мне студия не даёт выбрать платформу
dimasikusу меня раньше в студии можно было выбрать x32 и x64 а теперь тока AnyCPU.
т.е. при выборе доступно тока AnyCPU и Диспетчер конфигураций. У меня ещё стоит VirtualBox, Windows XP SP3 x86 так вот там в студии тоже также при выборе доступно тока AnyCPU и Диспетчер конфигураций.
А как влияет разрядность? Я знаю что она влияет на адресуемость памяти т.е. в 32 адрес состоит из 32 бит это 4Гб, а в 64 из 64 бит это намного больше чем 4Гб. Я думаю что приложения для х32 могут работать на х64, а вот приложения для х64 на х32 не будут работать.
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38879688
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikusЯ думаю что приложения для х32 могут работать на х64, а вот приложения для х64 на х32 не будут работать.

в одном процессе 32 и 64 код одновременно работать не могут
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38879705
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понятно
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38879708
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
просто у меня раньше проблем не было связанных с разрядностью вот и не разбирался.
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38879723
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikus,

В Express версии вроде как нельзя было выбрать платформу. Но если собирать из под командной строки - всё нормально, ограничения только в самой студии редакции Express. У вас какая?
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38879768
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня MS Visual Studio 2013 Ultimate с обновлением 3
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38879835
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikus,

VS 2013 Community
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38879847
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, создал у себя новые конфигурации 32 и 64. на 32 вроде работает. Тока вот вопрос остался на счёт структур. Я создал класс для работы с библиотекой, хотел бы чтобы указали на ошибки.
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38879861
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да забыл к библиотеке идет "Руководство программиста" приложить не удалось поскольку размер большой, но его можно скачать на сайте
пробую, некоторые функции не работают. приложение просто закрывается, я подозреваю что я неправильно импортировал функции передаваемые параметры, не те типы. подскажите какие надо.
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38880794
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
разобрался я со структурами, вопрос тока остался с указателями. есть функция, которая пишет в строку
Код: plaintext
1.
void CiStrError(short int cierrno, char *buf, short int n)

как передать *buf.
делаю я так
Код: c#
1.
2.
3.
4.
5.
[DllImport("chai.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
public static extern void CiStrError(short cierrno, ref string buf, short n);

string str = string.Empty;
CiStrError(10, ref str, 64);



так не работает, подскажите как надо?
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38880875
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikus,

вместо string передавай StringBuilder.
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38880976
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо работает, тока строка "潮猠捵⁨敤楶散漠⁲扯敪瑣"
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38881032
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikus, попробуйте посмотреть на ссылку от Изопропил

попробуйте [MarshalAs(UnmanagedType.LPStr)]


CiStrError - посмотрите в примерах... как из сишного кода используют...
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38881071
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за совет, разобрался почему так, просто в функции используется не Unicode a ANSI
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38882718
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
наткнулся на то что одна функция принимает двумерный массив. В MSDN не нашел Подскажите ка сделать?
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38882880
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikusПодскажите ка сделать?
передать одномерный, индексы пересчитать
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38882908
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это так:
Код: c#
1.
2.
3.
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16 * 32)]
        
private String[] name;
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38883158
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так или нет, скорее всего нет потому что выкидывает ошибку
Код: c#
1.
2.
3.
Необработанное исключение типа "System.TypeLoadException" в CAN_test.exe
Дополнительные сведения: Невозможно упаковать поле "name" типа "CHIP_STATE_DESC":
Недопустимое сочетание управляемого и неуправляемого типов (поля массивов должны составлять пару с ByValArray или с SafeArray).


напишите пожалуйста как надо.
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38883961
Фотография Belavik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikusнаткнулся на то что одна функция принимает двумерный массив. В MSDN не нашел Подскажите ка сделать?
char[][] или char**?
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #38884467
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
char[][]
я уже разобрался, при маршалинге двумерный массив преобразуется в одномерный. я делал правильно
Код: c#
1.
2.
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16 * 32)]
private String[] name;


тока вместо ByValTStr надо ByValTArray и в место String[] надо char[]
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #39130558
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
встретил функцию она принимает char**. не знаю что передавать, пробовал ref string, ref char, ref StringBilder не работает. может кто сталкивался?
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #39130586
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikus,

Что делает функция с параметром?

от этого сильно ответ зависит.(char ** вполне может быть указателем на массив строк,например)

универсальное решение - ref IntPtr - и далее руками маршаллить( Marshal.PtrToStringAnsi, Marshal.StringToCoTaskMemAnsi и т д)
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #39130597
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
она туда записывает что то
...
Рейтинг: 0 / 0
Подключение библиотеки .dll на C++ в проект C#
    #39130775
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikusона туда записывает что то
значит я правильно предположил -

параметр ref IntPtr,
строка получается при помощи Marshal.PtrToStringAnsi (естественно, в c# имеем копию строки)
...
Рейтинг: 0 / 0
42 сообщений из 42, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Подключение библиотеки .dll на C++ в проект C#
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]