MIDL未生成COM进程外服务器所需dlldata.c和Simple_p.c,如何解决?
问题原因与解决方法
核心问题
你的IDL文件将ISimple接口定义在了library块内部,MIDL编译器默认不会为library内的接口生成代理/存根文件——library块的核心作用是生成类型库(.tlb),而非处理远程调用所需的代理逻辑。
解决步骤
1. 调整IDL文件结构
将ISimple接口移到library块外部,同时在library内声明该接口以保证类型库能正确包含它。修改后的IDL如下:
import "unknwn.idl"; [ uuid(F1C3B039-C7C1-4375-9EE2-B8E438F6C12A), object, pointer_default(unique) ] interface ISimple : IUnknown { HRESULT Add([in] int a, [in] int b, [out] int* result); } [ uuid(12345678-1234-1234-1234-123456789012), version(1.0) ] library SimpleLib { interface ISimple; [ uuid(2D84F751-A78D-4FAB-9B6F-93D6E94578C2) ] coclass Simple { [default] interface ISimple; } }
2. 重新执行MIDL命令
保持你原来的MIDL命令不变,在Visual Studio开发者命令提示符中重新执行:
midl /Oicf /env win32 /h Simple.h /iid Simple_i.c /proxy Simple_p.c /dlldata dlldata.c /tlb Simple.tlb Simple.idl
此时MIDL会正确生成dlldata.c和Simple_p.c文件,配合其他生成的文件即可编译代理/存根DLL。
内容的提问来源于stack exchange,提问作者007 996
相关产品推荐
相关产品推荐

