在visual studio下,如果采用ATL模板编写COM进程外服务器(Local/Remote Server),编译器将自动生成ProxyStub(PS)的工程。利用IDL文件编译出来的相关文件可以直接编译链接成功。但是其中隐藏了很多的细节,本文从一个空的dll工程开始创建一个PS工程,并说明一下需要注意的细节。
本文以《inside COM》中第十章"Servers in EXEs"中的代码为例。
利用以下命令编译IDL文件server.idl:
midl /h iface.h /iid guids.c /proxy proxy.c server.idl
生成的文件包括:
Header File: iface.h
IID File: guids.c
DLL Data File: dlldata.c
Proxy File: proxy.c
利用Visual Studio 2008创建一个空的dll工程,将以上文件都添加到工程中。将《inside COM》所提供的DEL文件proxy.def文件也添加到工程中。proxy.def内容如下:
LIBRARY Proxy.dll
DESCRIPTION 'Proxy/Stub DLL'
EXPORTS
DllGetClassObject @1 PRIVATE
DllCanUnloadNow @2 PRIVATE
GetProxyDllInfo @3 PRIVATE
DllRegisterServer @4 PRIVATE
DllUnregisterServer @5 PRIVATE
这时的工程如下图所示:
Build工程,发现源文件均编译通过,但是Link出错,错误信息如下