首先宣告一下,常搜尋到的函式clsidfromprogid只能查詢本地登錄檔的值,如果opc server與客戶端不在同一臺伺服器,這個函式就沒有用。
另一種連線方式,是通過opc server的clsid(開啟登錄檔 ,計算機\hkey_classes_root\服務名),再通過clsidfromstring函式,這種方式有些取巧,不過也能實現功能。具體如下
clsid clsid_citect;
coserverinfo si;
zeromemory
(&si,
sizeof
(si));
//記憶體1 存放伺服器資訊
multi_qi mqi[1]
;zeromemory
(&mqi,
sizeof
(mqi));
//記憶體2 存放multi_qi用以獲取opc伺服器列表
//獲取伺服器列表,用到了opcenum.exe
cstring strip = l"192.168.5.93"
; si.pwszname =
(lpwstr)
(strip.
getstring()
);//covert cstring to lpwstr 把伺服器名轉為寬位元組字串
hresult hr;
clsidfromstring
(l""
,&clsid_citect)
;mqi[0]
.hr = s_ok;
mqi[0]
.piid =
&iid_iopcserver;
mqi[0]
.pitf =
null
; hr =
cocreateinstanceex
(clsid_citect,
null
, clsctx_all,
&si,
1, mqi);if
(hr != s_ok)
printf
("\cocreateinstanceex ret = 0x%08x\n"
,hr);if
(failed
(hr)
)else
/*獲取opc伺服器iunknow介面指標*/
iunknown piunknown =
(iunknown*
)mqi[0]
.pitf;
//得到第三個指標
還有一種就比較複雜,我也是從網上找的,這個是通過***iopcserverlist***獲取,具體如下:
"
,&clsid_citect)
;//直接使用clsid_opcserverlist報錯,改為將clsid_opcserverlist值轉換為clsid
mqi[0]
.hr = s_ok;
mqi[0]
.piid =
&iid_iopcserverlist;
mqi[0]
.pitf =
null
;//hresult hr = cocreateinstanceex(clsid_opcserverlist, null, clsctx_all, &si, 1, mqi);
hresult hr =
cocreateinstanceex
(clsid_citect,
null
, clsctx_all,
&si,
1, mqi);if
(hr != s_ok)
printf
("\cocreateinstanceex ret = 0x%x\n"
,hr);if
(failed
(hr)
)else
piserverlist =
(iopcserverlist*
)mqi[0]
.pitf;
//得到第乙個指標
if(piserverlist)
return
false;}
else
mqi[0]
.hr = s_ok;
mqi[0]
.piid =
&iid_iopcserver;
mqi[0]
.pitf =
null
; si.pwszname =
(lpwstr)
(strip.
getstring()
);hr =
cocreateinstanceex
(clsid_citect,
null
, clsctx_all,
&si,
1, mqi);if
(hr != s_ok)
printf
("\cocreateinstanceex ret = 0x%x\n"
,hr);if
(failed
(hr)
)return
false;}
else
if(piserverlist)
}else
return
false
;/*獲取opc伺服器iunknow介面指標*/
iunknown piunknown =
(iunknown*
)mqi[0]
.pitf;
//得到第三個指標
return
true
;}
還有乙個可能需要注意的說法,com元件註冊用coinitializeex才能遍歷遠端的opc server,coinitialize只能遍歷本地,這個我也沒有去嘗試,我使用的是coinitializeex。 mysql連庫 mysql遠端連庫
mysql連線遠端庫 伺服器端 1 登陸伺服器端,進入命令列,windows cmd 2 設定使用者 密碼讓指定的ip訪問 mysql u root p 或安裝的快捷方式進入 mysql command line client,使用grant命令 grant 許可權1,許可權2,許可權n on 資料...
搭建Pritunl Google認證遠端連線
pritunl是一款免費開源的 vpn 平台軟體 但使用的不是標準的開源許可證,使用者受到很多限制 這是一種簡單有效的vpn方式,一方面能有乙個相對簡單的途徑,易於初級使用者迅速搭建 vpn 服務 另一方面有能抵禦牆的干擾,提供穩定有效的 服務。pritunl採用 openvpn 方式,一方面提供了...
mysql 遠端日誌 讓mysql能夠遠端連線
在遠端連線mysql的時候發生的這個錯誤 error 1130 host is not allowed to connect to this mysql server 1。改表法一 首先確認3306遠端埠開啟。二 mysql預設不支援遠連.必須設定。如下 root許可權進入 mysql u root...