3
我是新的德爾福,我的程序在德爾福開發與C++開發的DLL工作,我需要處理指針函數,拋出訪問衝突地址的例外,經過多次測試,我不知道如何解決它。德爾福:使用指針函數
這是在Delphi指針功能的確定指標,由於報頭C++
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;
這是調用指針功能
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);
這是一個代碼轉換接口的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-一個線程功能作爲一種回調至WINAPI)。 –
如果您顯示了C++接口的匹配部分 –
,這將有所幫助有關類的隱式參數的[官方文檔](http://docwiki.embarcadero.com/RADStudio/XE3/en/Program_Control#Handling_Method_Calls)方法。 –