找回密码 注册 QQ登录
一站式解决方案

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?在线3D打印服务,一键上传,自动报价 
查看: 17014|回复: 0
打印 上一主题 下一主题

asp.net调用vc++2005写的com组件出现错误0x80010105 (RPC_E_SERVERFAULT))

[复制链接]
跳转到指定楼层
1
发表于 2011-11-28 19:56:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

您需要 登录 才可以下载或查看,没有帐号?注册

x
用vs2005 c++ 写的一个com 然后用asp.net调用

在网页后台的调用代码如下

  1. protected void Button1_Click(object sender, EventArgs e)
  2. {
  3. jkClass jkc = new jkClass();
  4. double m, z, b;
  5. jkc.Start();
  6. jkc.GetParamsValue(out m, out z, out b);
  7. TextBoxM.Text = m.ToString();
  8. TextBoxZ.Text = z.ToString();
  9. TextBoxB.Text = b.ToString();

  10. //jkc.Regen(10.0, 20.0, 30.0);
  11. jkc.Closed();


  12. }
复制代码
点击按钮之后出现错误,错误描述如下

服务器出现意外情况。 (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT))
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Runtime.InteropServices.COMException: 服务器出现意外情况。 (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT))

源错误:


行 25:             //TextBoxB.Text = b.ToString();
行 26:             jkc.Start();
行 27:             jkc.Regen(10.0, 20.0, 30.0);
行 28:             jkc.Closed();
行 29:

堆栈跟踪如下:

[COMException (0x80010105): 服务器出现意外情况。 (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT))]
   hllGearLib.jkClass.Regen(Double M, Double Z, Double B) +0
   Windlass.UI.ProeTest.Button1_Click(Object sender, EventArgs e) in E:\杨老师\461锚绞机\工程源码\Windlass\Windlass\UI\ProeTest.aspx.cs:27
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +110
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565


然后com里的该函数代码如下:
  1. STDMETHODIMP Cjk::GetParamsValue(DOUBLE* M, DOUBLE* Z, DOUBLE* B)
  2. {
  3. // TODO: 在此添加实现代码
  4. ProError status;
  5. ProFamilyName name;
  6. ProMdl p_handle;
  7. ProModelitem p_modelitem;

  8. ProStringToWstring(name, "D:\\PTC\\model\\gear\\conic_straight_gear.prt");
  9. status = ProMdlRetrieve(name, PRO_MDL_PART, &p_handle);

  10. if(status != PRO_TK_NO_ERROR)
  11. return S_FALSE;
  12. status = ProMdlToModelitem(p_handle, &p_modelitem);

  13. UserGetParamValue(p_modelitem, "M", M);
  14. UserGetParamValue(p_modelitem, "Z", Z);
  15. UserGetParamValue(p_modelitem, "B", B);
  16. return S_OK;
  17. }
复制代码
  1. ProError UserGetParamValue(ProModelitem owner
  2. , char* name
  3. , double *dValue)
  4. {

  5. ProError status;
  6. ProParameter param;
  7. ProName param_name;
  8. ProParamvalue proval;

  9. ProStringToWstring(param_name, name);
  10. status = ProParameterInit(&owner, param_name, &param);
  11. if(status != 0)
  12. return status;

  13. ProParameterValueGet(&param, &proval);
  14. double dTemp = proval.value.d_val;

  15. dValue = &dTemp;

  16. return PRO_TK_NO_ERROR;

  17. }
复制代码

很简单,就是在网页上点击按钮然后获取本机上的一个零件里的三个参数然后返回显示在网页上的三个文本框中
貌似是在这一句出问题了
        status = ProMdlRetrieve(name, PRO_MDL_PART, &p_handle);
我想是不是com里面对于字符串的处理导致的,因为前面用
         ProStringToWstring(name, "D:\\ptc\\model\\gear\\conic_straight_gear.prt");将路径字符串转换为宽字符串了。

有谁知道的能不能告诉一下怎么回事啊


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2024-9-29 01:22 , Processed in 0.022988 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

快速回复 返回顶部 返回列表