Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Импорт ф-ции из библиотеки, где параметр указатель на структуру [D7]


sss ©   (2012-09-24 03:49:00) 

Добрый день!

на Си-------------------------------------------------
#define CM24_NUMDEPCASSETTE   24
typedef struct SNOTECASSETTE    // * Structure used in SCASH SDEP SWITH
{                               // * for banknotes description
   char     CassName[2];
   char     Notetype[6];
   int      NumNote;
} SNOTECAS;

typedef struct SCASH
{
   int      InNumber;
   SNOTECAS Types[CM24_NUMDEPCASSETTE*4];
} SCASSTAT;
typedef SCASSTAT *PCASSTAT;
-----------------------------------------------

написал на Delphi----------------------------
  TSNOTECAS = record
     CassName: array[1..50] of char;
     Notetype: array[1..50] of char;
     NumNote: Integer;
  end;

   SCASSTAT = record
     InNumber: Integer;
     SNOTECAS: array [1..110] of TSNOTECAS;

  end;

   type PCASSTAT = ^SCASSTAT;
......
......
var
dps_total: PCASSTAT;
......

 New(dps_total);
 code_total := InterDoTotalsDeposit(dps_total);
 Dispose(dps_total);

Eror: ACCESS VIOLATION
Подскажите, что делаю не так?


Dimka Maslov   (2012-09-25 10:33:00) [1]


> надеюсь код сугубо для личного использования


Нет, это для финансовых рынков. Одним кликом мышки 24 доллара становятся 110-ю. Впрочем, они и без программистов умеют так делать.


sss   (2012-09-25 08:05:00) [2]

Спасибо, работает<B/>


__   (2012-09-24 13:35:00) [3]

> [0]
Ннн-да % понимаю еще Char =? AnsiChar, или там packedно
24 == 110  
2 == 50
6 == 50
и это for banknotes description
sss, надеюсь код сугубо для личного использования ?


Dimka Maslov   (2012-09-24 11:50:00) [4]


> А то я опечатался... лоханулся, то есть


А автор, после копипасты мог бы и посмотреть, что он накопипастил.


КряКря   (2012-09-24 11:21:00) [5]


> Dimka Maslov ©   (24.09.12 11:09) [8]
> PSCASSTAT = ^TSCASSTAT;


Да-да, совершенно верно. А то я опечатался... лоханулся, то есть)


Dimka Maslov   (2012-09-24 11:09:00) [6]

PSCASSTAT = ^TSCASSTAT;

или тогда
function InterDoTotalsDeposit(var DespositCounters: TSCASSTAT): Integer stdcall;

var
 DepositCounters: TSCASSTAT;

 InterDoTotalsDeposit(DepositCounters);


sss   (2012-09-24 08:39:00) [7]

ф-ция есть function InterDoTotalsDeposit (DepositCounters: PSCASSTAT): integer;stdcall;


bems   (2012-09-24 07:28:00) [8]

функцию сделай stdcall


sss   (2012-09-24 07:27:00) [9]

Спасибо.
КряКря, ошибка не ушла.


sss   (2012-09-24 07:26:00) [10]

Спасибо за ответы.

Заменил код на
const
CM24_NUMDEPCASSETTE = 24;

type
TSNOTECAS = packed record
  CassName: array[0..1] of AnsiChar;
  Notetype: array[0..5] of AnsiChar;
  NumNote: longint;
end;

TSCASSTAT = packed record
  inNumber: longint;
  Types: array[0..CM24_NUMDEPCASSETTE * 4 - 1] of TSNOTECAS;
end;
PSCASSTAT = TSCASSTAT;
...
var
dps_total: PSCASSTAT;
...
code_total := InterDoTotalsDeposit(dps_total);


Ошибка таже


КряКря   (2012-09-24 05:35:00) [11]

const
 CM24_NUMDEPCASSETTE = 24;

type
 TSNOTECAS = packed record
   CassName: array[0..1] of AnsiChar;
   Notetype: array[0..5] of AnsiChar;
   NumNote: longint;
 end;

 TSCASSTAT = packed record
   inNumber: longint;
   Types: array[0..CM24_NUMDEPCASSETTE * 4 - 1] of TSNOTECAS;
 end;
 PSCASSTAT = TSCASSTAT;


bems   (2012-09-24 05:22:00) [12]

размер массивов чаров не совпадает
также сишный char нужно заменить на AnsiChar


sss   (2012-09-24 03:53:00) [13]

Си *.h ----------------------
int APIENTRY InterDoTotalsDeposit(PCASSTAT);
-----------------------------


Наверх

Титульная страница Поиск, карта сайта Написать письмо