![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Всем здравствуйте. Если обрисовать покороче, то ситуация такая:
есть DLL от стороннего разраба и пример на C# к ней. все шло замечательно, но уперся в получении данных из одной функции, сам я в шарпе шарю на интуитивном уровне, а целый день гугления больше запутал, чем прояснил. Может вы подскажите? функция вызываемая из DLL описана так: Код:
/**************
return
>0 ok, return length
=0, no result.
<0 return (need len)
*********/
[DllImport("someDLL.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int someFunc(IntPtr A0, int[] A1, int[] A2, IntPtr B, int Len);Я в Delhi описал ее так: Код:
function someFunc(A0: Pointer; A1, A2: array of Integer; B:Pointer; Len: Integer): Integer; cdecl; external 'someDLL.dll'; Код:
int r = 0;
int[] a2 = new int[2];
int[] a1 = new int[2];
int len = 65535;
IntPtr aB;
aB = Marshal.AllocHGlobal(len);
r = someFunc(a0, a1, a2, aB, len);
if (r > 0)
{
switch (a2[0])
{
case (int)SOME_CONST:
{
SomeRecord rec;
r = (SomeRecord)Marshal.PtrToStructure(aB, typeof(SomeRecord));Код:
var r: Integer; a2: array[0..1] of Integer; a1: array[0..1] of Integer; aB: Pointer; len: Integer; rec: SomeRecord; begin r := 0; len := 65535; aB := nil; aB:= AllocMem(len); //a0 - глобальная переменная, с ней проблем нет, //иначе библиотека выкинет исключение r := someFunc(a0, a1, a2, aB, len); if(r > 0)then case a2[0] of SOME_CONST: begin CopyMemory(@rec, aB, SizeOf(rec)); Может кто знает что я делаю не так? |