Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.119.199] |
|
Сообщ.
#1
,
|
|
|
Уважаемые знатоки C# , подскажите такую тему,
имеется DLL на Си , (без исходника , только .h и инструкция описание на функции этой DLL) требуется использование этих функций в программе на C#WPF, например я делаю так [DllImport(@"hscli.dll")] static extern int hcSqlCheckInit(); private void button_Click(object sender, RoutedEventArgs e) { int err = -300000; err = hcSqlCheckInit() ; textBox_Copy3.AppendText("hcSqlCheckInit err = " + err.ToString() ) ; } и это работает потому что функция без параметров , я ее вызываю, и она отрабатывает а вот другую функцию на вход которой надо подать структуру , я уже не знаю как , хотя в инструкции к этой функции написано что можно подать 0 , но ноль не берет вот описание https://hytechdb.ru/index.php?s=docs&ru=V25..._hcSqlParmT.htm если бы как то так сделать можно было бы [DllImport(@"hscli.dll")] static extern int hcSqlInit( 0 ); private void button_Click(object sender, RoutedEventArgs e) { int err = -300000; err = hcSqlInit( 0 ) ; textBox_Copy3.AppendText("hcSqlInit err = " + err.ToString() ) ; } на Си я ее вызываю hcSqlParmT Init = { sizeof(Init) }; // Адрес структуры с параметрами инициализации err = hcSqlInit(&Init) ; // Инициализация клиентской части но на С++ там то есть и .h файл я подключаю и LIB-ку к проекту а тут чисто динамически , как объявить структуру Добавлено один код как бы попался на глаза но прилепить к сибе я его так и не смог http://www.adp-gmbh.ch/csharp/call_dll.html |
Сообщ.
#2
,
|
|
|
с этой структурой разобрался
Добавлено Теперь вот не могу воткнутся в следующую [StructLayout(LayoutKind.Sequential)] unsafe struct hcSqlDstInfoT // Структура "Информация о колонках результата" { public int aliasno; public int fieldno; public int type; public uint len; public uint off; public fixed char coder[32]; public fixed char fname[32]; public int func; public fixed char asname[32]; public int key; public int resno; }; private unsafe void button_Click(object sender, RoutedEventArgs e) { hcSqlDstInfoT[] infCol = new hcSqlDstInfoT[pCol]; // Структура "Информация о колонках результата" err = hcSqlReadResults(pOper, 0, bufOut, pRecSize * (uint)pStr, &cntOut);// Чтение результатов } и вот на этой функции вывлетает ошибка Помощник отладки управляемого кода "PInvokeStackImbalance" обнаружил неполадку в " \ComHyTech.vshost.exe". Дополнительные сведения: Вызов функции PInvoke "ComHyTech!ComHyTech.MainWindow::hcSqlReadResults" разбалансировал стек. Вероятно, это вызвано тем, что управляемая сигнатура PInvoke не совпадает с неуправляемой целевой сигнатурой. Убедитесь, что соглашение о вызовах и параметры сигнатуры PInvoke совпадают с неуправляемой целевой сигнатурой. |
Сообщ.
#3
,
|
|
|
так как я переделываю этот код из С/С++ на С++ он выглядит вот так
typedef struct hcSqlDstInfoT { int aliasno; int fieldno; int type; unsigned len; unsigned off; char coder[32]; char fname[32]; int func; char asname[32]; int key; int resno; } hcSqlDstInfoT; hcSqlDstInfoT *infCol = new hcSqlDstInfoT[pCol] ; // Структура "Информация о колонках результата" err = hcSqlGetStmtAttr(pOper, HSCLI_STMT_DST_INFO, 0, infCol, pCol * SIZE_HCSQLDSTINFOT, &cntOp) ; а вот как переделать на C# |
Сообщ.
#4
,
|
|
|
чувак походу шарписты не юзают такой изврат
у шарпистов все свое все новое, так сказать онли ньютехноложи Добавлено шарписты они все сидят на ASP.NET а там С++ и не пахнет, сам малеха сидел на ASP.NET |
Сообщ.
#5
,
|
|
|
Цитата Cfon @ чувак походу шарписты не юзают такой изврат у шарпистов все свое все новое, так сказать онли ньютехноложи Добавлено Сегодня, 15:54 шарписты они все сидят на ASP.NET а там С++ и не пахнет, сам малеха сидел на ASP.NET эт точно |
Сообщ.
#6
,
|
|
|
сам спросил сам ответил , всем спасибо по этой структуре вопрос закрыт , теперь другая функция колом стала
|