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

COM元件,在VB執行OK但在DELPHI下會出現Property的值超過的異常

缺席
bill534
一般會員


發表:38
回覆:51
積分:17
註冊:2007-02-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-04-22 14:28:17 IP:211.22.xxx.xxx 訂閱
COM元件的文件說明如下:
typedef struct DEVICEINFO {
short nPortNumber;
short nCpuNumber;
short nNetWorkNumber;
short nStationNumber;
short nUnitNumber;
BSTR strIPNumber;
long nTimeout;
} DEVICEINFO;
------------------------------------------------------------------------
VB 環境OK
-------------------------------------------------------------------
Private P_objCpRegister As YcsComm.ICpRegister
Private P_DevInfo As YcsComm.P_objCpRegister.SetDeviceInfo P_DevInfo -> 執行此行不會出錯誤
P_objCpRegister.Open
----------------------------------------------------------------------------------------------------
Delphi 下執行會出現異常 => Property 值超過
----------------------------------------------------------------------------------------------------
pData.strIPNumber := WideString('192.168.1.1'); 因為其它欄位都是數值就此欄WideString沒用過,懷疑是此欄位的關係 !
pData.nTimeout := 3000;
try
CpRegister.SetDeviceInfo(pData); -> 執行此行會出錯
finally
memo1.Lines.Add('SetDeviceInfo ... ' inttoHex(CpRegister.LastErrorCode, 8));
CpRegister.LastErrorCode := 0;
end;
end;
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-04-22 15:56:33 IP:59.125.xxx.xxx 訂閱
pData.strIPNumber := '192.168.1.1';
這樣就好

===================引 用 bill534 文 章===================
pData.strIPNumber := WideString('192.168.1.1'); 因為其它欄位都是數值就此欄WideString沒用過,懷疑是此欄位的關係 !
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
bill534
一般會員


發表:38
回覆:51
積分:17
註冊:2007-02-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-04-22 16:27:06 IP:211.22.xxx.xxx 訂閱
CString strIP = "192.168.1.1"
m_deviceinfo.strIPNumber = strIP.AllocSysString();

m_deviceinfo.nTimeout = 5000;
// 通信デバイス情報を設定する
m_objRegister->SetDeviceInfo(&m_deviceinfo);
}
Catch(_com_error &e)
{
MessageBox(e.Description());
}
…(中略)…
m_objRegister.Release(); // インスタンスの解放
m_objRegister = NULL;
SysFreeString(m_deviceinfo.strIPNumber);
bill534
一般會員


發表:38
回覆:51
積分:17
註冊:2007-02-22

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-04-26 11:22:04 IP:211.22.xxx.xxx 訂閱
StrIp: WideString;
begin
pData.nPortNumber := 1;
pData.nCpuNumber := 1;
pData.nUnitNumber := 1; // cp-217
pData.nNetWorkNumber := 0;
pData.nStationNumber := 0;
CpRegister.SetDeviceInfo(pData);
CpRegister.ACCESSMODE := YCS_BACKGROUND_SERVICE;
finally
memo1.Lines.Add('SetDeviceInfo ... ' inttoHex(CpRegister.LastErrorCode, 8));
CpRegister.LastErrorCode := 0;
end;
bill534
一般會員


發表:38
回覆:51
積分:17
註冊:2007-02-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-05-18 16:17:14 IP:211.22.xxx.xxx 訂閱
把結構的PACKED拿掉,就正常了 ! ......

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