Josen_Hong 2015-05-27 06:26 采纳率: 0%
浏览 1843

VS2005调用matlab2007a生成的com组件接口返回E_FAIL

32位XP系统中,使用matlab2007a的deploytool生成的com组件,在VS2005中编译并运行,能获得正确的结果。但release后在本地直接运行exe,在调用组件的函数接口时HRESULT返回了E_FAIL。
m文件代码:
function [ c ] = fun( a,b )
c = a + b;

MFC调用COM接口代码:
void Ctest_com2Dlg::OnBnClickedButton1()
{
CoInitialize(NULL);
HRESULT hresult;
CLSID clsid;
hresult=::CLSIDFromProgID(OLESTR("test.testclass.1_0"), &clsid);

    if (!(FAILED(hresult)))
    {
            Itestclass *pItest; 
            hresult=::CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER, __uuidof(Itestclass),(LPVOID *) &pItest);

            if (!(FAILED(hresult)))
            {
                    //声明COM组件接口函数所需的VARIANT类型的输入输出变量
                    VARIANT var, var2, varRes;
                    var.vt = VT_R8;//An 8-byte IEEE real value is stored in dblVal.
                    var.dblVal = -4;//初始值
                    var2.vt = VT_R8;
                    var2.dblVal = 15;//初始值

                    HRESULT rtmp;
                    rtmp = pItest->fun(1, &varRes, var, var2);
                    if(!(FAILED(rtmp)))
                    {
                            CString str;
                            str.Format(_T("%f"), varRes.dblVal);
                            MessageBox(str, _T("Hint"), MB_OK);
                    }
                    else
                            AfxMessageBox(_T("fun failed"));

                    //清除变量
                    VariantClear(&var);
                    VariantClear(&var2);
                    VariantClear(&varRes);
                    SafeArrayDestroy(var.parray);
                    SafeArrayDestroy(var2.parray);
                    SafeArrayDestroy(varRes.parray);
            }
            else
                    AfxMessageBox(_T("CoCreateInstance failed"));
    }
    else
            AfxMessageBox(_T("CLSIDFromProgID failed"));
    CoUninitialize();

}

在IDE中运行结果正常,但独立运行exe弹出"fun failed"的对话框。在生成com组件的distrib文件夹下,把test_mcr文件夹删除,不论是在IDE中运行还是独立运行exe,都能重新生成test_mcr文件夹,这表明即使独立运行exe,也是有调用到生成的com组件dll的。

但为什么在IDE中调用exe就正常,独立运行exe时接口调用会失败?

  • 写回答

5条回答 默认 最新

  • threenewbee 2015-05-27 06:32
    关注

    检查下你的com对象中有没有读取数据或者文件的逻辑,直接运行和ide运行的相对目录不同。
    就你的错误,只能看出是com组件调用的时候丢出了异常。

    评论

报告相同问题?

悬赏问题

  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程