Zlinkowanie funkcji napisanej w C++ z biblioteki DLL do Delphi

0

Mam taki nagłówek w c++

EXTERN_C int DLL_FUN test(	ctx* ObjectCtx,
								ctx* Object2Ctx, 
								const Doc* doc, const char* xpointer, 
								int addTimeStamp );

a w delphi zrobiłem tak:

function(var ObjectCtx: Pointer;
                                       var Object2Ctx: Pointer;
                                       const doc: Pointer;
                                       const xpointer: PAnsiChar;
                                       addTimeStamp: Integer):Integer cdecl stdcall;

ale niestety dostaje błąd o niepoprawnym wywołaniu funkcji API

1

Po pierwsze liczba parametrów jest różna, po drugie albo var albo pointer, bo tak to otrzymujesz podwójny wskaźnik, a po trzecie albo cdecl albo stdcall a nie oba.

0

liczba parametrów jest ta sama, a co z tym cdecl stdcall? Kompiluje mi sie i działa, czyli które wywalić?

0

Najpierw naucz się liczyć. Do pięciu to nie jest trudno :-). A potem przeczytaj sobie http://4programmers.net/Delphi/Cdecl.

Odszczekuję. Liczba parametrów jest taka sama. Za to w Delphi nie ma nazwy funkcji.

0

@Adam86:

type
  TestFunc = function(ObjectCtx, Object2Ctx: Pointer; const Doc: Pointer; const XPointer: PAnsiChar; AddTimeStamp: Integer): Integer; cdecl;
0

ja bym wywalił jeszcze te pointery, i zdefiniował osobny typ

type PObjCtx = pointer;
0

Można i tak, choć nadal będzie to typ ogólnego wskaźnika, który i tak trzeba będzie rzutować.

0
Type PCtx = Pointer;

Da nam tylko ładniejszy zapis - do funkcji nadal będzie można przekazać dowolny wskaźnik. Jeżeli chcesz dostać kontrolę typów przez kompilator, to pod FPC możesz zrobić:

Type
  PCtx = ^Ctx;
  TCtx = record;

Być może działa także pod Delphi - nie sprawdzałem, nie mam dostępu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1