接口在VC中定义用Delphi调用 ( 积分: 300 )

  • 主题发起人 godelphi2004
  • 开始时间
是VC这边的问题了,表面看指针返回了,但在Delphi那边看根本没有得到指针:
ICommOperator * __stdcall CreateCommOperator(int port)
{
// return new CCommOperator(port);
// Create an instance of the component.
CCommOperator* pCommObj = new CCommOperator(port);
if (pCommObj == NULL)
return NULL;

// Get the requested interface.
ICommOperator *iTmp = NULL;
pCommObj->QueryInterface(IID_ICommOperator, (void **)&iTmp) ;
return iTmp;
}
更稀奇的是传进来的port参数是不对的,但在用抽象类实现时都正常:(
IUnknown接口的实现代码基本来源于《 Essential COM 》中的 “2.8 实现IUnknown”
 
如果方便把你现在的代码给我一份,我看一下,
 
OK,如果方便您可以留一个Email,或者用“在线呼叫”告诉我,谢谢了[:)]
 
在线呼叫 是什么功能,怎么用呀,没用过,教教我
 
呵呵,知道了,有意思
 
如果不想在帖子上面留Email可以使用“在线呼叫”功能的[:)]
 
soft.fire@163.com
 
To:RailGundi
已经发给你了,麻烦抽时间看看了:)
 
参数不对基本上都是调用方式的问题。一般均采用stdcall.所以在DELPHI当中也必须使用STDCALL.(看来你的VC中已经__stdcall).
另外你的这种函数声明是我所不习惯的。对于这种函数,我的习惯一般声明如下
//ICommOperator * __stdcall CreateCommOperator(int port)
HRESULT __stdcall CreateCommOperator(int port;ICommOperator **);
 
感谢zjan521,调用方式没有问题的,在Delphi方也是使用stdcall调用约定的,我说了“在用抽象类实现时都正常”,也就是说用抽象类实现时参数和返回值都是对的
 
delphi 实在是没法说它,埃
 
那就不说它好了:)
感谢zjan521和RailGundi的帮助,两位的方案都可以解决问题,区区分数不足以表示谢意,结帖了[:)]
 
接受答案了
 
顶部