3
저는 델파이에서 새로 왔습니다. C++로 개발 된 dll로 델파이로 개발 된 프로그램으로, 액세스 위반 주소의 예외를 throw하는 포인터 함수로 작업해야합니다. 그것을 해결하는 방법을 알아라.델파이 : 포인터 함수로 작업하기
이이 포인터 기능
type
function CBMICRRead : Integer; stdcall;
function CBMICRStatus(dwStatus: LongWord) : Integer; stdcall;
Respuesta : TMICRCallback;
Estado : TStatusCallback;
BiSetStatusBackFunction(m_hApi, Estado);
BiMICRSetReadBackFunction (m_hApi,
Respuesta,
m_MICRReadBuffSize,
m_MICRReadBuff[0],
m_MICRReadStatus,
m_MICRReadStDetail);
이것은입니다 전화 코드가
type
TMICRCallback = function: Integer of Object; stdcall;
TStatusCallback = function(dwParam: Cardinal): Integer of Object; stdcall;
type
TBiMICRSetReadBackFunction =
function(const nHande: Integer;
pMicrCB: TMICRCallback;
var pReadBuffSize: Byte;
var readCharBuff: Byte;
var pStatus: Byte;
var pDetail: Byte
): Integer; stdcall;
var
BiMICRSetReadBackFunction: TBiMICRSetReadBackFunction;
type
TBiMICRSetReadBackFunction =
function(const nHande: Integer;
pMicrCB: TMICRCallback;
var pReadBuffSize: Byte;
var readCharBuff: Byte;
var pStatus: Byte;
var pDetail: Byte
): Integer; stdcall;
var
BiMICRSetReadBackFunction: TBiMICRSetReadBackFunction;
헤더 C++ 이후 번역 델파이에서 포인터 기능 (고화질)입니다 인터페이스의 C++ 쪽 :
typedef int (CALLBACK* MICRCallback)(void);
typedef int (CALLBACK* StatusCallback)(DWORD);
int WINAPI BiSetStatusBackFunction(int nHandle,
int (CALLBACK *pStatusCB)(DWORD dwStatus));
int WINAPI BiMICRSetReadBackFunction(int nHandle,
int (CALLBACK *pMicrCB)(void),
LPBYTE pReadBuffSize,
LPBYTE readCharBuff,
LPBYTE pStatus,
LPBYTE pDetail);
만 ("암시 적 자기 매개 변수"를 검색 (안 "개체의") 콜백으로 일반 기능을 사용할 수, 예를 들어 http://stackoverflow.com/questions/7706637/how-to-pass-the-address -of-a-thread-function-as-a-callback-to-winapi)를 사용합니다. –
C++ 인터페이스의 일치하는 부분을 보여 주면 도움이 될 것입니다 –
클래스의 암시 적 매개 변수에 대한 [공식 문서] (http://docwiki.embarcadero.com/RADStudio/XE3/en/Program_Control#Handling_Method_Calls)는 다음과 같습니다 방법. –