을 실행하는 데 실패하고이 오류를 가지고 : WTclient은 - OPCENUM 내 코드는 매우 간단하고 내가 실행하지 못했습니다 완벽하게 작동하는 인터넷에서 찾은 예제 응용 프로그램을 따르십시오. 내 프로그램이 완벽하게 컴파일되고 실행되지만 Numbr = NumberOfOPCServers (TRUE, MachineName)에 도달하면; 그 라인 오류가 나타납니다.오류 : WTclient은 - OPCENUM에게 내가 도착하고 OPC 서버에 태그를 보내기 위해 OPC 클라이언트를 쓰고 있어요
내 .ccp은 다음과 같습니다
int CWTclientApp::GetServerListFromOPCENUM(CString pathname)
{
IOPCServerList *gpOPC;
HRESULT hr, hr2;
IEnumGUID *pEnumGUID;
CLSID catid, clsid;
unsigned long c;
LPOLESTR pszProgID, pszUserType;
int i;
OPCSVRDESCR *pSvr;
for (i=0; i<MyServerList.GetSize(); i++)
{
pSvr = (OPCSVRDESCR *)MyServerList.GetAt(i);
delete (pSvr);
}
MyServerList.RemoveAll();
// create the enumerator object
gpOPC = CreateServerEnumerator(pathname);
if (gpOPC == NULL)
{
DoErrorMsg (0, "Failed to Execute OPCENUM");
// revert to search of Registry if OPCENUM fails to execute
return (GetServerListFromRegistry());
}
............................................
() 함수 NumberOfOPCServers에서 호출됩니다 : 깊이 다른 인터넷 예
#include "stdafx.h"
#include "opcda.h"
#include "opc_ae.h"
#include "wtclientapi.h"
#include "OPC2.h"
int _tmain(int argc, _TCHAR* argv[])
{
int Numbr;
MachineName = "";
Numbr = NumberOfOPCServers(TRUE, MachineName);
return 0;
}
디버깅,이 함수에서 온 그 오류를 발견했습니다 :
_declspec(dllexport) int WINAPI NumberOfOPCServers (bool UseOPCENUM, LPCSTR MachineName)
{
CWTclientApp *pApp;
CString path;
path = MachineName;
path.MakeUpper();
if (path == "LOCAL")
path = "";
else
path = MachineName;
pApp = (CWTclientApp *)AfxGetApp();
if (UseOPCENUM)
return (pApp->GetServerListFromOPCENUM(path));
else
return (pApp->GetServerListFromRegistry());
}
왜이 오류가 발생합니까? OPCenum.exe가 내 컴퓨터 (로컬 서버)에서 실행중인 OPC 서버를 열거하지 않는 것 같지만 그 이유는 무엇입니까? (다운로드 된 응용 프로그램을 수행하고 광산하지 않습니다와 함께)
감사합니다 !!!!
편집 --------------------------------------------- --------------------------- CreateServerEnumerator() :
IOPCServerList *CWTclientApp::CreateServerEnumerator (CString PathName)
{
HRESULT r2;
MULTI_QI mqi;
COSERVERINFO sin, *sinptr;
DWORD clsctx;
// set up server info
//
if (PathName.GetLength() > 0)
{
sinptr = &sin;
sin.dwReserved1 = 0;
sin.dwReserved2 = 0;
sin.pwszName = WSTRFromCString (PathName, FALSE);
sin.pAuthInfo = 0;
clsctx = CLSCTX_REMOTE_SERVER;
}
else
{
sinptr = 0; // pointer should be NULL if local
clsctx = CLSCTX_LOCAL_SERVER;
}
// set up mqi
//
mqi.pIID = &IID_IOPCServerList;
mqi.hr = 0;
mqi.pItf = 0;
r2 = CoCreateInstanceEx(CLSID_OPCServerList, NULL,
clsctx, sinptr, 1, &mqi);
if (PathName.GetLength() > 0)
WSTRFree (sin.pwszName, FALSE);
if (FAILED(r2) || FAILED(mqi.hr))
return (NULL);
return (IOPCServerList*)mqi.pItf;
}
는 CreateServerEnumerator에 소스 코드가 있습니까? – ZbynekZ
@ZbynekZ, 예, 질문이 수정되었습니다. –
r2 값 -> r2 = 0x800401f0 : CoInitialize가 호출되지 않았습니다. –