描述:
我是菜鸟,最近在做DCOM,有谁告诉我proxy/stub怎么做(for dll/exe),waiting...
解决方案1:
不好意思,我旁边没有VC,不能帮你看具体在哪。
楼主不要用原IDL文件重新编译生成的文件去替换原来的文件(temp_i.c等),IDL文件不要包含到Proxy/Stub的DLL的工程中,工程只包含temp_i.c、temp_p.c、dlldata.c、stdafx.h和一个.def文件,然后在temp_i.c、temp_p.c、dlldata.c中的开头加上include "stdafx.h"(手工加上)。再编译即可。注意.def文件中应该为:
LIBRARY ProxyStubDLL // 库名,随便定一个,一般与工程名相同
EXPORTS // 可能为EXPORT,记不到了
DllRegisterServer PRIVATE // COM进程内组件必须实现的四个导出函数,
// 我旁边没有资料,记不到
GetProxyDllInfo PRIVATE // 必须有这个导出函数
现在编译即可
楼主的工程打开了“预编译头”文件选项,它要求在工程中的每个源文件的最开头包含一个头文件,即必须在所有的源文件(.c或.cpp)中,以#include "stdafx.h"为开头。楼主在工程属性(VC6中,Project/Settings)中将其关闭即可。或者在工程目录下创建一个空的头文件,命名为stdafx.h,再在每个源文件的开头加上#include "stdafx.h"即可。
解决方案3: 将楼主的接口信息用IDL语言表达出来,即编写一个.idl文件(假设为temp.idl),用MIDL编译它(可以简单的在VC中打开temp.idl,点编译命令即可),将生成temp_i.c、temp_p.c、temp.h和dlldata.c。
新建一个DLL工程,包含temp_i.c、temp_p.c和dlldata.c,再添加一个.def文件,在文件中除了导出COM进程内组件必备的那四个导出函数外,再加一句
GetProxyDllInfo PRIVATE
编译生成的dll既为proxy.dll