C# 调用 C++ com组件问题

zbking 2013-06-17 01:03:44
在VC2005中编写了个组件,实现加法计算

C++ 代码
long addfun(long a1,long a2)
{
retrun a1+a2;
}

C#这边注册ocx并引用代码如下
private void Form1_Load(object sender, EventArgs e)
{
ActiveXDemoLib.ActiveXDemoClass ax = new ActiveXDemoClass();

int A1 = 20, A2 = 30, A3 = 0;
A3 = ax.AddFun(A1, A2);
MessageBox.Show(A3.ToString());
}

问题:单步调试发现程序执行到ADDFUN调用就retrun了。感觉是C++代码把C#函数给提前retrun了请问大侠指导一二。感激不尽。
...全文
188 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zbking 2013-06-17
  • 打赏
  • 举报
回复
问题终于找到了,那个ocx组件必须拖到一个窗体上。不能直接用代码创建。感谢大家的支持
zbking 2013-06-17
  • 打赏
  • 举报
回复
引用 8 楼 wddw1986 的回复:
[quote=引用 2 楼 zbking 的回复:] [quote=引用 1 楼 wddw1986 的回复:] 出异常了吧,你的参数类型都不匹配,你看看VS的输出,肯定是有异常。
C++的long对应的就是C#的INT啊,VS没有异常输出[/quote] C++的在64位下可不对应C#的int,而是long[/quote] 改为int64 编译报错: 错误 1 与“ActiveXDemoLib.ActiveXDemoClass.AddFun(int, int)”最匹配的重载方法具有一些无效参数 WindowsApplication1 错误 2 参数“1”: 无法从“long”转换为“int”
cheng2005 2013-06-17
  • 打赏
  • 举报
回复
引用 2 楼 zbking 的回复:
[quote=引用 1 楼 wddw1986 的回复:] 出异常了吧,你的参数类型都不匹配,你看看VS的输出,肯定是有异常。
C++的long对应的就是C#的INT啊,VS没有异常输出[/quote] C++的在64位下可不对应C#的int,而是long
zbking 2013-06-17
  • 打赏
  • 举报
回复
环境:OCX是Vc2005在XP编写 C#程序是VS2005在WIN7 64位下编写,C#项目改为X86平台。
zbking 2013-06-17
  • 打赏
  • 举报
回复
引用 1 楼 wddw1986 的回复:
出异常了吧,你的参数类型都不匹配,你看看VS的输出,肯定是有异常。
用try catch 捕捉异常,发现确实有异常,不知道为什么VS2005没报出来。异常如下 System.Runtime.InteropServices.COMException (0x8000FFFF): 灾难性故障 (异常来自 HRESULT:0x8000FFFF (E_UNEXPECTED)) 在 System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData) 在 ActiveXDemoLib.ActiveXDemoClass.AddFun(Int32 Add1, Int32 Add2) 在 WindowsApplication1.Form1.Form1_Load(Object sender, EventArgs e) 位置 C:\Users\zjl-dev\Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\Form1.cs:行号 30
idea_yuye 2013-06-17
  • 打赏
  • 举报
回复
感觉是类型不匹配,发生异常了。 A3用int64试下看怎么样
zbking 2013-06-17
  • 打赏
  • 举报
回复
引用 3 楼 bdmh 的回复:
你看看A3的值正确返回了吗
A3始终是初始值0.
bdmh 2013-06-17
  • 打赏
  • 举报
回复
你看看A3的值正确返回了吗
zbking 2013-06-17
  • 打赏
  • 举报
回复
引用 1 楼 wddw1986 的回复:
出异常了吧,你的参数类型都不匹配,你看看VS的输出,肯定是有异常。
C++的long对应的就是C#的INT啊,VS没有异常输出
cheng2005 2013-06-17
  • 打赏
  • 举报
回复
出异常了吧,你的参数类型都不匹配,你看看VS的输出,肯定是有异常。

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧