初始化COM:调用CoCreateInstance后的报错。(200分)

  • 主题发起人 主题发起人 叶不归
  • 开始时间 开始时间

叶不归

Unregistered / Unconfirmed
GUEST, unregistred user!
由于种种原因,我不得不用VC写一个动态链接库c.dll,在c.dll中初始化另外一个com,
然后,用delphi写一个dd.exe来调用这个c.dll
如:
c.dll
---------
int ctest::InitCom() = 0
{ CoInitialize(NULL);
return m_vpMgr.CoCreateInstance(CLSID_VP);
//m_vpMgr是接口,CLSID_VP是类ID
}
在这个c.dll里导出了ctest类,在Delphi中调用c.dll里,也做了ctest的相应声明
procedure TForm1.Button1Click(Sender: TObject);
var
hw: ctest;
begin
hw := Getctest;
hw.ttt; //是ctest的另一个函数,用来测试,没其他用途。
hw.InitCom; //程序运行中这里返回值是S_OK,表明是初始化成功的
end;
调用正常,但主程序dd.exe关闭时报内存错。
如果不调用hw.InitCom,只调hw.ttt,关闭dd.exe则不报错,因此我认为是
InitCom函数里CoCreateInstance搞的鬼。
请问这是为什么??
如果我说的不清楚,请指明…
 
DELPHI不能使用VC的类,如果是BCB的做适当的调整可以使用,
 
To 叶不归
你是那种方式调用的dll
是stdcall吗?
调用dll的声明和实现部分的代码我看看
你的QQ多少?
 
to 张无忌: delphi不能调用VC的类---这句话不对。
to 老人家:
定义:
#ifdef __EXPORTS__
#define CLASS_a111 __declspec( dllexport )
#else
#define CLASS_a111
#endif
class CLASS_a111 ctest
{
virtual int __cdecl InitCom( void );
virtual void __cdecl ttt( void );
};
extern "C" CLASS_a111 ctest *Getctest( void );
{
return new ctest;
}

Delphi code:
------------------------
ctest= class(TObject)
public
function InitCom:LongInt; virtual; cdecl; abstract;
procedure ttt; virtual; cdecl; abstract;
end;
function Getctest:ctest; cdecl; external 'c.dll' name 'Getctest';
---
procedure TForm1.Button1Click(Sender: TObject);
var
hw: ctest;
begin
hw := Getctest;
hw.ttt; //是ctest的另一个函数,用来测试,没其他用途。
hw.InitCom; //程序运行中这里返回值是S_OK,表明是初始化成功的
end;

另外:QQ:8046837,在线。



 
有人吗?怎么没反应了?
 
有没有可能是在DLL中结尾没有OleUninitialize的缘故啊
 
自己解决了:
将m_vpMgr.CoCreateInstance(CLSID_VP);改为
CoCreateInstance(CLSID_VP, NULL, XX_inproc_server(进程内服务器),
IID_vpMgr, (void**) m_vpMgr);
用这样创建的没有问题,
可能是原先的使用了对象的缘故,可能在dy_dll中不能使用C对象吧?
版主,有空帮我收回分数,谢谢。
 
后退
顶部