厂家提供一个idl类型的文件给我们做二次开发,厂家说是接口文件,我在delphi中按动态连接库的方法调用不成功,不知如何使用?
解决方案 »
- external exception c0000008 这个错误见过吗? 急的我在线等!
- [加急]ReportBuild 10.2+TExtraDevices 报表怎么转 Excel ?
- 如何才能在最短的时间内将有10万条记录的数据集中的数据全部插入数组?不胜感激!!!!
- 我怎么就变汉奸了?
- dxDbGrid焦点在最后一条记录上Insert时最后一条记录会先被新记录取代掉(在线等)
- delphi如何调用WORD进行文件管理
- 数据库图片显示,求救!!!!!!!!!
- 关于全局变量的问题
- 关于数据库连接的问题,在线等待
- 关于控件的非技术问题,回答对就给分!
- Delphi下如何处理网络字节序?使用什么函数。
- 求助,想自定义一个Delphi控件,开发人员把控件从控件板拖到窗体后,双击此控件,可弹出属性设置对话框,如何做?
MIDL是Microsoft的IDL编译器。
在用IDL对接口和组件进行了描述后,可以用MIDL进行编译,生成相应的代理和存根DLL的C代码。
一个例子:
import “unknown.idl” ///用于将其他IDL文件中的定义包含到当前文件中
///Interface IX
[ ///注意是[ ]不是 {}
object, ///所定义的接口是一个COM接口
uuid(32bb8323-b41b-11cf-a6bb-0080c7b2d682), ///相应的接口IID
helpstring(“IX Interface”), ///将帮助串放入类型库
pointer_default(unique) ///这类指针可以为空,函数内可以修改它们的值,但不能指定别名
]
interface IX:IUnknown
{
///in关键字告诉MIDL需要将此参数值从客户传递给组件,存根代码不需要送回任何值。
HRESULT FxStringIn([in,string]wchar_t* szIn);
///out关键字告诉MIDL参数仅被用来从组件向客户传回有关的数据,
///代理不需要对输出参数进行列集,也不需要将参数传给组件。
HRESULT FxStringOut([out,string]wchar_t* szout);
///COM对字符串的标准约定是Unicode字符(即wchar_t)
}
IDL文件可以定义C和C++风格的结构,并可用它们作为函数的参数。
当IDL文件中有一个library时,MIDL将生成一个类型库。
MIDL为接口生成相应的代理和存根的C代码。
为得到一个代理/存根DLL,需要编译和链接MIDL生成的C文件。
宏REGISTER_PROXY_DLL将完成代理/存根DLL在注册表中的注册操作。
有了IDL和MIDL我们就可以象调用进程内组件那样进行跨进程边界的函数调用,并对参数进行列集。属性COM范围.
http://graphics.cs.uni-sb.de/NMM/current/Docs/idl/x19.html
IDL是CORBA的另外一个重要组成部分,用于说明CORBA服务对象完成的功能,但不能够利用IDL实现该功能。IDL是独立于其他编程语言的功能描述性语言,这从另外一个侧面说明了CORBA的语言环境独立性。利用IDL,完成CORBA服务对象方法的说明,然后利用语言映射工具,将用IDL定义的CORBA对象方法说明翻译成高级编程语言的接口说明,最后根据接口说明,利用C++或Java编写对象实现程序。