马上注册,结交更多同行朋友,交流,分享,学习。
您需要 登录 才可以下载或查看,没有帐号?注册
x
用vs2005 c++ 写的一个com 然后用asp.net调用
在网页后台的调用代码如下
- protected void Button1_Click(object sender, EventArgs e)
- {
- jkClass jkc = new jkClass();
- double m, z, b;
- jkc.Start();
- jkc.GetParamsValue(out m, out z, out b);
- TextBoxM.Text = m.ToString();
- TextBoxZ.Text = z.ToString();
- TextBoxB.Text = b.ToString();
- //jkc.Regen(10.0, 20.0, 30.0);
- jkc.Closed();
- }
复制代码 点击按钮之后出现错误,错误描述如下
服务器出现意外情况。 (异常来自 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里的该函数代码如下:
- STDMETHODIMP Cjk::GetParamsValue(DOUBLE* M, DOUBLE* Z, DOUBLE* B)
- {
- // TODO: 在此添加实现代码
- ProError status;
- ProFamilyName name;
- ProMdl p_handle;
- ProModelitem p_modelitem;
- ProStringToWstring(name, "D:\\PTC\\model\\gear\\conic_straight_gear.prt");
- status = ProMdlRetrieve(name, PRO_MDL_PART, &p_handle);
- if(status != PRO_TK_NO_ERROR)
- return S_FALSE;
- status = ProMdlToModelitem(p_handle, &p_modelitem);
- UserGetParamValue(p_modelitem, "M", M);
- UserGetParamValue(p_modelitem, "Z", Z);
- UserGetParamValue(p_modelitem, "B", B);
- return S_OK;
- }
复制代码- ProError UserGetParamValue(ProModelitem owner
- , char* name
- , double *dValue)
- {
- ProError status;
- ProParameter param;
- ProName param_name;
- ProParamvalue proval;
- ProStringToWstring(param_name, name);
- status = ProParameterInit(&owner, param_name, ¶m);
- if(status != 0)
- return status;
- ProParameterValueGet(¶m, &proval);
- double dTemp = proval.value.d_val;
- dValue = &dTemp;
- return PRO_TK_NO_ERROR;
- }
复制代码
很简单,就是在网页上点击按钮然后获取本机上的一个零件里的三个参数然后返回显示在网页上的三个文本框中
貌似是在这一句出问题了
status = ProMdlRetrieve(name, PRO_MDL_PART, &p_handle);
我想是不是com里面对于字符串的处理导致的,因为前面用
ProStringToWstring(name, "D:\\ptc\\model\\gear\\conic_straight_gear.prt");将路径字符串转换为宽字符串了。
有谁知道的能不能告诉一下怎么回事啊
|