[关于IDL:代理/存根] [英] [About IDL:Proxy/Stub]

查看:146
本文介绍了[关于IDL:代理/存根]的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要定义自定义代理/存根com对象在VC6.0环境中,步骤如下:
1,定义一个简单的IDL文件
2,通过MIDL编译
3,将* _i.c,* _ p.c,*.h,*.def添加到空Win32 DLL
4,定义功能:DllGetClassObject,DllCanUnloadNow等.
5,编译所有Dll
发生链接错误:
****************************************************** ************
Main.obj:错误LNK2005:_DllGetClassObject @ 12已在dlldata.obj中定义
Main.obj:错误LNK2005:_DllCanUnloadNow @ 0已在dlldata.obj中定义
Main.obj:警告LNK4006:_DllGetClassObject @ 12已在dlldata.obj中定义;第二个定义被忽略
Main.obj:警告LNK4006:_DllCanUnloadNow @ 0已在dlldata.obj中定义;第二个定义被忽略
创建库Debug/HelloProxyStub.lib和对象Debug/HelloProxyStub.exp
HelloProxyStub.exp:警告LNK4070:.EXP中的/OUT:HelloProxyStubDef.dll指令与输出文件名"Debug/HelloProxyStub.dll"不同;忽略指令
Debug/HelloProxyStub.dll:致命错误LNK1169:找到一个或多个乘法定义的符号
执行link.exe时出错.
****************************************************** ************

I wanto to define a custom proxy/stub com object At VC6.0 Envirment,steps as follow:
1、Define A Simple IDL File
2、Compile it by MIDL
3、Add *_i.c、*_p.c、*.h、*.def To Empty Win32 DLL
4、Define Funtion:DllGetClassObject、DllCanUnloadNow etc.
5、Compile All Dll
Link Error Happened:
**************************************************************
Main.obj : error LNK2005: _DllGetClassObject@12 already defined in dlldata.obj
Main.obj : error LNK2005: _DllCanUnloadNow@0 already defined in dlldata.obj
Main.obj : warning LNK4006: _DllGetClassObject@12 already defined in dlldata.obj; second definition ignored
Main.obj : warning LNK4006: _DllCanUnloadNow@0 already defined in dlldata.obj; second definition ignored
Creating library Debug/HelloProxyStub.lib and object Debug/HelloProxyStub.exp
HelloProxyStub.exp : warning LNK4070: /OUT:HelloProxyStubDef.dll directive in .EXP differs from output filename "Debug/HelloProxyStub.dll"; ignoring directive
Debug/HelloProxyStub.dll : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.
**************************************************************

推荐答案

dlldata.c
中的宏DLLDATA_ROUTINES
已经定义了DllGetClassObjectDllCanUnloadNow
因此您不必重复两次(您的第四个位置):)
The macro DLLDATA_ROUTINES in your dlldata.c

has already defined DllGetClassObject and DllCanUnloadNow,
so you have not to do it twice (your fourth position) :)


在楼上:谢谢您和我还有其他问题
如果要实现自定义的代理/存根结构,则必须为所有Com对象构建一个以上的代理/存根结构?例如:ClassFactory,COM Class1,COM Class2,因为dlldata.c中的DLLDATA_ROUTINES宏
我已经定义了DllGetClassObject(此函数定义了一个Com对象).
To upstairs:Thank You And I Have Other Question
If i want to realize a custom proxy/stub structure,I Must Build More Than One Proxy/Stub For All Com Object?Such As:ClassFactory、COM Class1、COM Class2,Because The macro DLLDATA_ROUTINES in dlldata.c
has already defined DllGetClassObject(This Function Definition A Com Object)。


我认为,DllGetClassObject
的第一个参数 对于不同的类可能会有所不同...:)
I think, the first parameter of DllGetClassObject
could be different for the different classes... :)


这篇关于[关于IDL:代理/存根]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆