![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Импорт ф-ции из библиотеки, где параметр указатель на структуру [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);
-----------------------------