VC生成的COM组件导入到DELPHI后函数变过程了! ( 积分: 100 )

  • 主题发起人 主题发起人 skyerli
  • 开始时间 开始时间
S

skyerli

Unregistered / Unconfirmed
GUEST, unregistred user!
各位帮帮忙, 在VC下写COM的时候
HRESULT SetFont() ;有HRESULT返回值的,但导入后变成procedure SetFont
safecall;
请问这是什么问题?
 
各位帮帮忙, 在VC下写COM的时候
HRESULT SetFont() ;有HRESULT返回值的,但导入后变成procedure SetFont
safecall;
请问这是什么问题?
 
個人認為是Delphi里面沒有這種類型的值。。。
 
没有问题,在C++里你要自己判断HRESULT的值来判断函数执行是否成功。
在Delphi里发明了'safecall'关键词,由编译器自动处理。
Delphi帮助:'The safecall convention implements exception “firewalls.” On Windows, this implements interprocess COM error notification.';

另外 Delphi里是有HRESULT类型的。
如果不定义成safecall,可以用OleCheck过程来判断调用是否成功。
 
汗。。。。。。
看來還是要多學習點才行哦。。。。
 
我看了一下,在Delphi的COM中應該是不支持HRESULT類型的。
 
xeen and all:
问题是在VC 生成ATL COM给调用的时候明明是有返回值的,HRESULT 等同于 S_OK的,在delphi的windows单元有HRESULT,但在D6-》PROJECT-》import type library..之后把我在VC++ com里面的不管有没有返回值的函数都给D6自动生成procedure funcORproc :safecll;了,这样就没办法判断返回值了。
 
to skyeli:
我不是说了吗,声明成safecall的过程不用你去判断返回值,Delphi自己给你判断,
如果返回值不是S_OK,Delphi会抛出异常。
 
如果你非要自己判断返回值,不用safecall,可以采用以下办法:
Delphi IDE
选Tools->Enviroment Options ->Type library
->safecall function mapping
选中 Do not map
这样就是用返回值机制来代替异常机制来处理错误了。
 
后退
顶部