線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1205
推到 Plurk!
推到 Facebook!

請問 Delphi 與 VC 的callback function 傳遞問題. (使用COM)

尚未結案
cdklokBCB
一般會員


發表:15
回覆:27
積分:8
註冊:2003-02-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-09-18 13:54:59 IP:59.124.xxx.xxx 未訂閱

請教各位大大:

小弟在 VC 寫了一個 COM 給 Delphi 的AP 使用, 如下

// VC

// com.h

typedef struct _tag_SYSCALLBACK_PROPERTIES
{
int (*GetBitsImage)(BYTE bChannelNo);
} tag_SYSCALLBACK_PROPERTIES, *ptag_SYSCALLBACK_PROPERTIES;


// com.cpp

STDMETHODIMP CI_COM::_Initial(ULONG pbsyscbprops)
{
tag_SYSCALLBACK_PROPERTIES *psyscbprops = (tag_SYSCALLBACK_PROPERTIES *)pbsyscbprops;
psyscbprops->GetBitsImage(1);
}

// Delphi
type
_tag_SYSCALLBACK_PROPERTIES = record
GetBitsImage: function(bChannelNo: BYTE;): Integer;
end {_tag_SYSCALLBACK_PROPERTIES};
tag_SYSCALLBACK_PROPERTIES = _tag_SYSCALLBACK_PROPERTIES;
ptag_SYSCALLBACK_PROPERTIES = ^_tag_SYSCALLBACK_PROPERTIES;

function GetBitsImage(bChannelNo: BYTE;): Integer;
begin
Result := 1;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
pAvc_scb_props: ptagAVC_SYSCALLBACK_PROPERTIES;

begin
CoInitialize(nil);

CoCreateInstance(CLASS_CIAVC_COM,
nil,
CLSCTX_INPROC_SERVER,
IID_IIAVC_COM,
m_CI);

p_scb_props := @m_scb_props;
p_scb_props.GetBitsImage := GetBitsImage;
m_CI._Initial(DWORD(p_scb_props));

end;

請問進入 function GetBitsImage(bChannelNo: BYTE;) 時,

為何 bChannelNo 不是1呢? 我傳遞其他變數, 指標 等都不會出錯.

唯獨 function pointer 裡面的參數會錯.

謝謝~

系統時間:2024-05-17 9:57:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!