TAG:
IDL是接口定义语言。MIDL是Microsoft的IDL编译器。在用IDL对接口和组件进行了描述后,可以用MIDL进行编译,生成相应的代理和存根DLL的C代码。
MIDL编译器将生成XX.H XX_.C XX_P.C DLLDATA.C 个文件,其作用分别为: XX.H 一个同C和C++兼容的,包含IDL中所描述的所有接口声明的头文件; XX_.C 一个定义有IDL文件中所用的所有GUID的C文件 XX_P.C 一个实现IDL文件中接口的代理及残 的C文件 DLLDATA.C 一个包含代理和残 的DLL的C文件 用MIDL编译有的时候可能不方便,你可以建立一个DLL工程,然后加载IDL编译就可以了。 (1)在IDL编译环境下,在*.pro过程中增加VCInitIDL子过程,该过程的主要功能是初始化VC的编译环境,进行VC环境和IDL环境的链接;
(2)把IDL语言需要的dll重新整理成一个文件夹idl,并把该文件夹拷贝到系统子目录下,然后在VC代码中设置这个路径:m_IDLDrawWidget.SetIdlPath("Redite/bin/bin.x86"); (3)在系统平台下,修改VC代码并进行调用: if(m_IDLDrawWidget.GetSafeHwnd()==NULL)//判断是否已经创建Widget,false创建;true销毁 { m_IDLDrawWidget.Create("",WS_CHILD,CRect(0,0,1,1),this,1000,NULL); }else { m_IDLDrawWidget.DestroyDrawWidget(); } m_IDLDrawWidget.SetIdlPath("Redtide/bin/bin.x86"); //设置idl的路径; m_IDLDrawWidget.InitIDL((long)m_hWnd); //初始化句柄 CString strCommand; strCommand=CString(".Compile Redtide/Color24.pro"); m_IDLDrawWidget.ExecuteStr(strCommand); m_IDLDrawWidget.SetOnInit("VcInitIDL"); //设置链接 long i=m_IDLDrawWidget.CreateDrawWidget(); if(i<=0) { AfxMessageBox("创建IDL出现错误!"); return; } (pascal4) |