клиент COM перевод с VB на MFC
От: Yuri_ua Украина  
Дата: 31.12.06 14:29
Оценка:
Сервер на удаленной машине. На vb код выглядит так:
Srv = CreateObject("TrafInsp.TrafInspAdmin", ServerName)
Srv.APILogon(APIPass)
ну и так далее, через Srv вызываются нужные функции...
Хочу перевести на MFC. Полистал хелп, все очень уныло и отталкивающе Подскажите, какие функции использовать, в какую сторону копать. С СОМ дело раньше не имел. Может есть какой-нибудь примерчик? А то в msdn не нашел чтоб к удаленному компьютеру...



31.12.06 19:04: Перенесено модератором из 'C/C++' — Odi$$ey
Re: клиент COM перевод с VB на MFC
От: George Seryakov Россия  
Дата: 31.12.06 23:27
Оценка:
Здравствуйте, Yuri_ua, Вы писали:

Y_>Сервер на удаленной машине. На vb код выглядит так:

Y_> Srv = CreateObject("TrafInsp.TrafInspAdmin", ServerName)
Y_> Srv.APILogon(APIPass)
Y_>ну и так далее, через Srv вызываются нужные функции...
Y_>Хочу перевести на MFC. Полистал хелп, все очень уныло и отталкивающе Подскажите, какие функции использовать, в какую сторону копать. С СОМ дело раньше не имел. Может есть какой-нибудь примерчик? А то в msdn не нашел чтоб к удаленному компьютеру...

CoCreateInstanceEx

Примерчик... компилировать лень... примерно так:

#define _WIN32_DCOM
...
#import "TrafInsp.TrafInspAdmin" no_namespace named_guids
...
CComPtr<ITrafInspAdmin> pTrafInspAdmin; // это если интерфейс называется ITrafInspAdmin, иначе нужно поправить
COSERVERINFO csServerInfo = {0L, ServerName /* должно быть char* */, 0, 0};
MULTI_QI mqResults = {IID_TrafInspAdmin, NULL, 0};
HRESULT hr = CoCreateInstanceEx(CLSID_TrafInsp, NULL, CLSCTX_ALL, &csServerInfo, 1, &mqResults);
pTrafInspAdmin.Attach(mqResults.pItf);
hr = pTrafInspAdmin->APILogon(APIPass);
GS
Re[2]: клиент COM перевод с VB на MFC
От: Yuri_ua Украина  
Дата: 01.01.07 13:23
Оценка:
GS>Примерчик... компилировать лень... примерно так:
Выдает:
fatal error C1083: Cannot open type library file: 'TrafInsp.TrafInspAdmin': No such file or directory
извиняюсь за свой уровень в COM, но потому и спрашиваю. Буду читать, пытаться разобраться. Если еще подскажите, буду очень рад. Спасибо.
Re[3]: клиент COM перевод с VB на MFC
От: Nazik Россия  
Дата: 01.01.07 19:18
Оценка:
Вместо 'TrafInsp.TrafInspAdmin' необходимо указать путь к typelib'у данной COM библиотеки...

Здравствуйте, Yuri_ua, Вы писали:

GS>>Примерчик... компилировать лень... примерно так:

Y_>Выдает:
Y_>fatal error C1083: Cannot open type library file: 'TrafInsp.TrafInspAdmin': No such file or directory
Y_>извиняюсь за свой уровень в COM, но потому и спрашиваю. Буду читать, пытаться разобраться. Если еще подскажите, буду очень рад. Спасибо.
Re[4]: клиент COM перевод с VB на MFC
От: Yuri_ua Украина  
Дата: 01.01.07 20:52
Оценка:
Спасибо большое, начало получаться Вот, что вышло.
#import "F:\PROGRA~1\TrafInsp\tiregtlb.dll" no_namespace named_guids
...
CLSID CLSID_TrafInsp;
IID IID_TrafInspAdmin;
_variant_t State;
CLSIDFromProgID(LPCOLESTR("TrafInsp.TrafInspAdmin"), &CLSID_TrafInsp);// Возвращает CLSID для заданного ProgID
IIDFromString( LPOLESTR("TrafInsp.TrafInspAdmin"),&IID_TrafInspAdmin );

CComPtr<ITrafInspAdmin> pTrafInspAdmin; // это если интерфейс называется ITrafInspAdmin, иначе нужно поправить
COSERVERINFO csServerInfo = {0L, LPWSTR(ServerName) /* должно быть char* */, 0, 0};
MULTI_QI mqResults = {&IID_TrafInspAdmin, NULL, 0};
HRESULT hr = CoCreateInstanceEx(CLSID_TrafInsp, NULL, CLSCTX_ALL, &csServerInfo, 1, &mqResults);
if (hr!=S_OK)
{
AfxMessageBox(LPCTSTR("Error"));
return;
}
pTrafInspAdmin.Attach((ITrafInspAdmin*)mqResults.pItf);
hr = pTrafInspAdmin->APILogon(APIPass);
буду разбираться дальше.
Re[5]: клиент COM перевод с VB на MFC
От: Yuri_ua Украина  
Дата: 01.01.07 22:31
Оценка:
Ураа!!! Заработало Без вашей помощи крышу бы сорвало Вот что получилось:

#define _WIN32_DCOM
#import "F:\PROGRA~1\TrafInsp\tiregtlb.dll" no_namespace named_guids
...
_variant_t State;
CLSIDFromProgID(L"TrafInsp.TrafInspAdmin", &CLSID_TrafInsp);//    Возвращает CLSID для заданного ProgID
CComPtr<ITrafInspAdmin> pTrafInspAdmin;
COSERVERINFO csServerInfo = {0L, L"192.168.0.1", 0, 0};
MULTI_QI mqResults = {&IID_TrafInspAdmin, NULL, 0};
HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
hr = CoCreateInstanceEx(CLSID_TrafInsp, NULL, CLSCTX_ALL, &csServerInfo, 1, &mqResults);
if (hr!=S_OK)
{
    AfxMessageBox(L"Error");
    return;
}
pTrafInspAdmin.Attach((ITrafInspAdmin*)mqResults.pItf);
hr = pTrafInspAdmin->APILogon(APIPass);
State = pTrafInspAdmin->APIGetUserState(UserID);
pTrafInspAdmin.Release();

строчка #import "F:\PROGRA~1\TrafInsp\tiregtlb.dll" no_namespace named_guids конечно мне неочень нравится зато работает
Re[6]: клиент COM перевод с VB на MFC
От: George Seryakov Россия  
Дата: 02.01.07 14:59
Оценка:
Здравствуйте, Yuri_ua, Вы писали:

Y_>
Y_>#define _WIN32_DCOM
Y_>#import "F:\PROGRA~1\TrafInsp\tiregtlb.dll" no_namespace named_guids
#import "progid:TrafInsp.TrafInspAdmin" no_namespace named_guids // портабельно

Y_>_variant_t State;
Y_>CLSIDFromProgID(L"TrafInsp.TrafInspAdmin", &CLSID_TrafInsp);//    Возвращает CLSID для заданного ProgID
// Это не нужно. Импорт должен давать правильный классайди. Посмотри в tlh/tli файлах.

Y_>pTrafInspAdmin.Release();
// Это не нужно. Смартпойнтер должен управлять ссылками сам.

Y_>
GS
Re[7]: клиент COM перевод с VB на MFC
От: Yuri_ua Украина  
Дата: 04.01.07 10:41
Оценка:
Здравствуйте, George Seryakov, Вы писали:
Y_>>
Y_>>#define _WIN32_DCOM
Y_>>#import "F:\PROGRA~1\TrafInsp\tiregtlb.dll" no_namespace named_guids
GS>#import "progid:TrafInsp.TrafInspAdmin" no_namespace named_guids // портабельно

Error 1 error C3501: there is no typelib registered for ProgID 'TrafInsp.TrafInspAdmin' d:\doc\traffinsp\tispd\tispd\tispdDlg.h 19
Y_>>pTrafInspAdmin.Release();
GS>// Это не нужно. Смартпойнтер должен управлять ссылками сам.
Y_>>

Я думал это отключение . Ну если строчка есть, хуже не будет?
Возникла проблема... На сервере, после подключения моего клиента (вызывает функции получения данных сервера каждые 1-3с.) сильно растет объем занятой памяти с 180Мб до 500Мб за 6часов
Подскажите, это глюк в сервере?, или возмжно в моем клиенте? (коннекчусь удаленно с другой машине. На машине клиента все ОК)
Re[8]: клиент COM перевод с VB на MFC
От: Yuri_ua Украина  
Дата: 04.01.07 19:11
Оценка:
Y_>Возникла проблема... На сервере, после подключения моего клиента (вызывает функции получения данных сервера каждые 1-3с.) сильно растет объем занятой памяти с 180Мб до 500Мб за 6часов
Разобрался. Проблема в сервере. Вопрос снят. Большое Спасибо всем кто помог.С Рождеством Христовым!
Re[8]: клиент COM перевод с VB на MFC
От: George Seryakov Россия  
Дата: 05.01.07 18:27
Оценка:
Здравствуйте, Yuri_ua, Вы писали:

Y_>>>
GS>>#import "progid:TrafInsp.TrafInspAdmin" no_namespace named_guids // портабельно
Y_>

Y_>Error 1 error C3501: there is no typelib registered for ProgID 'TrafInsp.TrafInspAdmin' d:\doc\traffinsp\tispd\tispd\tispdDlg.h 19

Ну так взять и зарегистрировать эту длл.
regsvr32 F:\PROGRA~1\TrafInsp\tiregtlb.dll
GS
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.