VC  6.0COM DLL创建步骤:
-------------------------------------------------
1、通过向导建立 ATL 工程(DLL),工程名 :OCRCOM
2、通过向导建立Simple Object,输入的名称为: Fun
3、通过向导向 IFun 添加一个方法  GetText([in] BSTR s1, [out] BSTR *s2); 
4、实现 GetText 函数;
5、编译通过 并 regsvr32 命令注册成功
-------------------------------------------------使用:
1、通过向导建立MFC工程COMTest;
2、通过向导 ClassWizard,执行 Add Class,选择 From a type library(选择OCRCOM.DLL),自动生成IFun类;
3、实现调用函数void CCOMTestDlg::OnButton1() 
{
IFun spDisp; // 包装类的对象
spDisp.CreateDispatch( _T("OCRCOM.Fun.1") ); //启动组件

char *chText = "D:\\PIC\\1.bmp"; BSTR *pbstrText; spDisp.GetText(chText, pbstrText); // 调用函数  (感觉根本没有调用到) spDisp.ReleaseDispatch(); // 释放接口 return ;
}4、编译通过帮我看看有什么遗漏步骤,感觉GetText接口更本没有(用depends工具没有在OCRCOM.DLL看到GetText函数)

解决方案 »

  1.   

    depends是看不到COM接口的函数的
      

  2.   

    TO:akirya
     
    com 怎么调试?
      

  3.   

    用OleView可以查看组件的COM接口,
    不能单步调试吗?看看函数的返回值
      

  4.   

    可以啊,要是com和exe都是本机编译的话,debug版直接就能够步入到com的代码。
      

  5.   


    我进不去,
    这个DLL文件我注册过多次(不同目录的且一开始的DLL有错),是否导致了不能调试?COM DLL要放在系统目录下吗?感谢上面各位
      

  6.   

    你在COM DLL工程中attach到你的EXE进程中就可以了。
    调试中使用EXE进程取得,然后会进入COM DLL工程的代码中。
      

  7.   

    哎,找到原因了,很晕
    BSTR pbstrText;//或 BSTR *pbstrText
    spDisp.GetText(strName.c_str(), &pbstrText);
    -----------------------------------------------
    系统自动生成的代码会检查 BSTR 参数,为空就直接返回了BSTR pbstrText 用来返回字符串
    这个我到底该怎么写?是COM接口自己分配空间还是调用者来分配?