|
전에 한번 글을 올렸는데 아직 해결이 안되서 다시 올립니다.
DCOM입니다.
서버는 VC++6.0으로 작성되어 DCOM 서버에 올려진 상태입니다.
클라이언트는 C++빌더로 작성하고 있으며
서버의 인터페이스를 얻는데 계속 실패하고 있습니다.
CoCreateInstanceEx까지는 잘 진행됩니다.
(<--1, <--2을 막은 후 리턴된 hr의 결과를 보면.. 성공함)
그러나 아래의 <---1, <----2을 막지 않으면
[Linker Error] Unresolved external '__stdcall _com_issue_error(long)' referenced from D:\BORLAND\TMS1\UNIT1.OBJ
에러가 뜹니다.
이와 같은 에러는 보통 C++ Builder와 VC++의 링커 네이밍 규칙이 다를때 나오는 에러로 알고 있는데... 하지만 이 문제 때문에 COM을 사용한건데 이런 에러가 뜨니... 무엇이 문제인가요?
"p"를 얻는데 성공해야 그 다음 작업을 할텐데... 부탁합니다.
#import "Smart.tlb"
#include "Smart_i.c"
...
중략
...
HRESULT hr ;
memset(&svrinfo, 0, sizeof(svrinfo));
CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_NONE, RPC_C_IMP_LEVEL_IDENTIFY, NULL, EOAC_NONE, NULL);
svrinfo.dwReserved1 = 0;
svrinfo.dwReserved2 = 0;
svrinfo.pwszName = L"ip주소";
svrinfo.pAuthInfo = NULL;
psvrinfo = &svrinfo;
ICSmartPtr p;
MULTI_QI qi[1] ;
qi[0].pIID = &IID_ICSmart;
qi[0].hr = 0;
qi[0].pItf = NULL;
try{
hr = ::CoCreateInstanceEx(
CLSID_CSmart,
NULL,
CLSCTX_ALL,
psvrinfo,
1,
&qi[0]);
if(FAILED(hr))
{
ShowMessage("Fail");
_com_issue_error(hr); <---------- 1 이거 안 막으면 에러남
return;
}
else
{
ShowMessage("Success");
}
// 아래의 것이 안되면 도대체 어떻게 해야 p값을 얻을 수 있는 건가요?
p = qi[0].pItf; <------------------------ 2 이것도 안 막으면 에러남
}
catch(_com_error& e)
{
AnsiString szMsg= "에러가 발생\n";
szMsg += e.ErrorMessage();
ShowMessage(szMsg);
return;
}
...
생략
|