ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

(C#)вопрос
  #1  
Старый 25.10.2009, 21:57
csrss
Познающий
Регистрация: 13.04.2009
Сообщений: 42
Провел на форуме:
293024

Репутация: 111
По умолчанию (C#)вопрос

Такой вопрос: моя либа експортирует следующуйю функцию:

Код:
DWORD myfunction(PULONG number, PULONG sramber);
с тем что 1ый аргумент ето число, 2ой - таблица числ. Терь из
C#-повской проги мне нада использовать ету функцию
и я вапще без понятия как. Вот типа есть такой код:

Код:
        [DllImport("C:\\Users\\Administrator\\Desktop\\DLL\\DLL.dll", CharSet = CharSet.Auto)]
        public static extern UInt32 myfunction(
            out UInt32 number,
	out UInt32[] sramber,
            );
Код:
UInt32 nr = new UInt32();
UInt32[] tbl = new UInt32[256];
myfunction(out nr, out tbl);
после вызова myfunction - application crash.
Кароче я без понятия как ето реализовать
 
Ответить с цитированием

  #2  
Старый 26.10.2009, 00:31
Algol
Регистрация: 29.05.2002
Сообщений: 1,793
Провел на форуме:
2050916

Репутация: 0


По умолчанию

Цитата:
Сообщение от csrss  
Код:
UInt32 nr = new UInt32();
UInt32[] tbl = new UInt32[256];
myfunction(out nr, out tbl);
Не имеет смысла инициализировать переменные, которые передаются в метод с модификатором out.
Передавать нужно скорее всего по ref.
 
Ответить с цитированием

  #3  
Старый 26.10.2009, 01:25
csrss
Познающий
Регистрация: 13.04.2009
Сообщений: 42
Провел на форуме:
293024

Репутация: 111
По умолчанию

да переменные можно вообще не инициализировать, тут не в том дело. Тут ни с ref ни с out нет никакой возможности вытащить из функции таблицу =( Может еще попробовать загнать ето в IntPtr и от туда конверт в UInt32 / UInt64 но ето мне кажетса уже извращенством =/.

Edit: кароче C# ето редкостное де*мо и ни хрена с ним невозможно сделать. Поворот обратно к managed c++ .NET.

Последний раз редактировалось csrss; 26.10.2009 в 02:22..
 
Ответить с цитированием

  #4  
Старый 26.10.2009, 10:01
W!z@rD
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме:
1892597

Репутация: 836


Отправить сообщение для W!z@rD с помощью ICQ
По умолчанию

бздец, не гони на язык, пиши нормальным русским языком, либо п**уй в школу обратно.
по сабжу.

DWORD myfunction(PULONG number, PULONG sramber);

[DllImport("c:\\temp.dll", SetLastError = true)]
public static extern int myfunction(ref int number, ref int sramber)
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...

Последний раз редактировалось W!z@rD; 26.10.2009 в 10:03..
 
Ответить с цитированием

  #5  
Старый 26.10.2009, 17:49
csrss
Познающий
Регистрация: 13.04.2009
Сообщений: 42
Провел на форуме:
293024

Репутация: 111
По умолчанию

Как на C# не гнать, ну как скажи? Вот банальный пример когда C# обламываетса:

вот длл откомпиленная при помощи GCC, и какого у неё в зависимостях либы от internet explorer? я конешно не знаю



C# сразу выбрасывает dll not found exception если попробуеш её заимпортировать. В случае с WinAPI (C/C++) - никакого гемора нет.
Я ессно знаю что можно пытатся добавлять все эти зависимости в PATH Environment Variable, etcetera. Может сразу целый program files добавить?

А по сабжу, тут ни out ни ref, тут нужно по ходу с IntPtr & GCHandle возиться, но это еще не проверял так как у меня тут утро тока щас.
P.S. Вообще откуда у тебя идея меня отправить в школу? xD
 
Ответить с цитированием

  #6  
Старый 26.10.2009, 19:04
W!z@rD
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме:
1892597

Репутация: 836


Отправить сообщение для W!z@rD с помощью ICQ
По умолчанию

судя по твоему знанию русского языка. =\

References смотри, не добавляется ничего само собой.

http://img20.imageshack.us/img20/9510/10262009210346.jpg
либа собранная на .NET 3.5, 2008 студия.
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...
 
Ответить с цитированием

  #7  
Старый 26.10.2009, 21:08
csrss
Познающий
Регистрация: 13.04.2009
Сообщений: 42
Провел на форуме:
293024

Репутация: 111
По умолчанию

<offtop>
Цитата:
судя по твоему знанию русского языка. =\
Я из россии сматал 13 лет назад, так что общаюсь как могу уж =/

Вобщем там с длл трабла была в возвращении MessageBox в одном месте в случае ошибки. От туда и сотня разных зависимостей появилась. Но всё равно, ИМХО, реализация DLLImport намного позади стандартных LdrLoadDll && LdrGetProcedureAddress || LoadLibraryEx && GetProcAddress
</offtop>

Вобщем намутил я следующее:

Код:
int[] Table = new int[256];
GCHandle handle= GCHandle.Alloc(Table, GCHandleType.Pinned);
IntPtr TableHandle= handle.AddrOfPinnedObject();
int Number;
int Status = myfunction(TableHandle, out Number);
Всё равно еще оно не то, но кажетса что уже ближе. Кароч буду дальше пробовать.

Последний раз редактировалось csrss; 26.10.2009 в 21:11..
 
Ответить с цитированием

  #8  
Старый 26.10.2009, 23:13
Algol
Регистрация: 29.05.2002
Сообщений: 1,793
Провел на форуме:
2050916

Репутация: 0


По умолчанию

Цитата:
Сообщение от csrss  
Но всё равно, ИМХО, реализация DLLImport намного позади стандартных LdrLoadDll && LdrGetProcedureAddress || LoadLibraryEx && GetProcAddress
Так C# не для этих дел
Я вообще не вижу необходимости импортировать что-то из нативного кода. Из всего что может понадобиться - 99% есть во фреймворке. А нативный код для сишарпа чужеродный, оттого и проблемы у тебя, что ты его вместо си пытаешся использовать.
 
Ответить с цитированием

  #9  
Старый 27.10.2009, 00:22
csrss
Познающий
Регистрация: 13.04.2009
Сообщений: 42
Провел на форуме:
293024

Репутация: 111
По умолчанию

В C# я уже и так минимум пробую реализовать. Просто нужно сделать ГУИ в чем-то, а поскольку в C# & visual studio 2008 это от силы занимает пол часа вот я и взялся а теперь мучаюсь. Топик исчерпан в принципе.
 
Ответить с цитированием

  #10  
Старый 27.10.2009, 08:26
W!z@rD
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме:
1892597

Репутация: 836


Отправить сообщение для W!z@rD с помощью ICQ
По умолчанию

возьми проимпортируй LoadLibrary и т.п.

А вообще не надо задачу подстраивать под инструмент.
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ