Создание proxy/stub
От: akella-pro  
Дата: 30.11.05 10:04
Оценка:
Как-то, месяца 4 назад, меня завоевало желание написать (в целях собственного опыта) программу со структурой клиент-сервер. Учился исправно по мегакнижке "Основы СОМ Дейла Роджерсона" и "Технология СОМ с сайта developing.ru", строго разбирался во всех мелочах и параллельно делал свой собственный проэкт, совершенствуя его по мере обучения. Дошел до места где надо сделать DLL заместителя/заглушки! Почитав, понял -> пишем файл с расширением idl (текст ниже), создаем проэкт New Project->Visual C++ Project->Win32->(Application type: DLL, Additional option: Empty Project) (среда: Visual Studio 2003), включаем этот файл в проэкт, компилируем файл, после чего он нам генерит 4 файла name_i.c name_p.c name_h.h dlldata.c!!! Код, как мне и обещали, оказался почти нечитаемым. Включил файлы в проэкт закомпилил, получаю ошибку компиляции "Fatal error C1189: #error : You need a Windows 2000 or later to run this stub because it uses these features" Полез на этот сайт, вырыл, оказывается проблема решается установкой ключей "/no_robust /Os" в MIDL компиляторе. И тут же появилась проблема линковки проэкта ->

Linking...
BaseServ_p.obj : error LNK2001: unresolved external symbol _CStdStubBuffer_DebugServerRelease@8
BaseServ_p.obj : error LNK2001: unresolved external symbol _CStdStubBuffer_DebugServerQueryInterface@8
BaseServ_p.obj : error LNK2001: unresolved external symbol _CStdStubBuffer_CountRefs@4
BaseServ_p.obj : error LNK2001: unresolved external symbol _CStdStubBuffer_IsIIDSupported@8
BaseServ_p.obj : error LNK2001: unresolved external symbol _CStdStubBuffer_Invoke@12
BaseServ_p.obj : error LNK2001: unresolved external symbol _CStdStubBuffer_Disconnect@4
BaseServ_p.obj : error LNK2001: unresolved external symbol _CStdStubBuffer_Connect@8
BaseServ_p.obj : error LNK2001: unresolved external symbol _CStdStubBuffer_AddRef@4
BaseServ_p.obj : error LNK2001: unresolved external symbol _CStdStubBuffer_QueryInterface@12
BaseServ_p.obj : error LNK2001: unresolved external symbol _IUnknown_Release_Proxy@4
BaseServ_p.obj : error LNK2001: unresolved external symbol _IUnknown_AddRef_Proxy@4
BaseServ_p.obj : error LNK2001: unresolved external symbol _IUnknown_QueryInterface_Proxy@12
BaseServ_p.obj : error LNK2001: unresolved external symbol _NdrOleFree@4
BaseServ_p.obj : error LNK2001: unresolved external symbol _NdrOleAllocate@4
BaseServ_p.obj : error LNK2019: unresolved external symbol __imp__NdrProxyErrorHandler@4 referenced in function _BaseInterface_Sum_Proxy@16
BaseServ_p.obj : error LNK2019: unresolved external symbol __imp__NdrClearOutParameters@12 referenced in function _BaseInterface_Sum_Proxy@16
BaseServ_p.obj : error LNK2019: unresolved external symbol __imp__NdrProxyFreeBuffer@8 referenced in function _BaseInterface_Sum_Proxy@16
BaseServ_p.obj : error LNK2019: unresolved external symbol __imp__NdrConvert@8 referenced in function _BaseInterface_Sum_Proxy@16
BaseServ_p.obj : error LNK2019: unresolved external symbol __imp__NdrProxySendReceive@8 referenced in function _BaseInterface_Sum_Proxy@16
BaseServ_p.obj : error LNK2019: unresolved external symbol __imp__NdrProxyGetBuffer@8 referenced in function _BaseInterface_Sum_Proxy@16
BaseServ_p.obj : error LNK2019: unresolved external symbol __imp__RpcRaiseException@4 referenced in function _BaseInterface_Sum_Proxy@16
BaseServ_p.obj : error LNK2019: unresolved external symbol __imp__NdrProxyInitialize@20 referenced in function _BaseInterface_Sum_Proxy@16
BaseServ_p.obj : error LNK2019: unresolved external symbol __imp__NdrStubGetBuffer@12 referenced in function _BaseInterface_Sum_Stub@16
BaseServ_p.obj : error LNK2019: unresolved external symbol __imp__NdrStubInitialize@16 referenced in function _BaseInterface_Sum_Stub@16
dlldata.obj : error LNK2019: unresolved external symbol __imp__NdrDllGetClassObject@24 referenced in function _DllGetClassObject@12
dlldata.obj : error LNK2019: unresolved external symbol __imp__NdrDllCanUnloadNow@4 referenced in function _DllCanUnloadNow@0
dlldata.obj : error LNK2019: unresolved external symbol _NdrCStdStubBuffer_Release@8 referenced in function _CStdStubBuffer_Release@4
Debug/RBaseServ.dll : fatal error LNK1120: 27 unresolved externals



Содержание IDL файла:

import "oaidl.idl";
import "ocidl.idl"; //-> включаем файлы

//interface Base
[
object,
uuid(EAEDF493-1BD4-43ce-9675-D067D62E239F),
helpstring("BaseInterface"),
pointer_default(unique)
]

interface BaseInterface: IUnknown
{
HRESULT Sum([in]ULONG a,[in]ULONG b,[in,out]ULONG* c)=0;
HRESULT Difference([in]ULONG a,[in]ULONG b,[in,out]ULONG* c)=0;
};

В книжке все легче решается, на практике не понятные мне ошибки... Может кто поможет?? Ссылочку? Совет? Носом торните — не обижусь! Спасибо за внимание!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.