大家来帮忙,小弟实习的问题,谢谢各位,尤其感谢gomoku 和yatobiaf! (绝不倒分!)

aijinjin 2008-06-27 11:10:47
首先申明 我是windiewang(这个号分已散完),注册的新号,有分肯定给大家,绝不倒分!

小弟我在一公司实习,这是我最近要做的项目。

VS2005下用C#做界面,调一博士做的识别模块dll(C++)

C# 2005 express下开发,在各位帮助下有些问题已解决,仍有下面的问题

1. 在gomoku的帮助下,做了个中介C++Dll去调博士的模块Dll,然后再在我的C# form中DllImport中介C++Dll的函数

我需要在C#中得到一个TxObject的信息(TxObject在.h中定义),所以我把中介C++Dll的函数返回类型设为TxObject

可是在C#中DLLImport的时候不认这个返回值类型,如何办?

如果设置成void,我怎么得到TxObject的信息呢?

2. 窗体的Onload函数和Form_Load函数有什么区别啊?

我要实现的窗体位置同步,从网上参考的代码,只能写在Onload函数下,在Form_Load函数下会报错。为什么?


小弟新人实习,比较菜,希望得到大家的帮助。

谢谢各位,尤其感谢gomoku 和yatobiaf!
...全文
166 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
gomoku 2008-06-27
  • 打赏
  • 举报
回复
this.m_form1.LocationChanged += new EventHandler(form1_LocationChanged);这里会出现
未处理的“System.StackOverflowException”类型的异常出现在 mscorlib.dll 中。


private void form1_LocationChanged(object sender, EventArgs e)
{
this.Location = new Point(this.m_form1.Location.X + this.m_form1.Width, this.m_form1.Location.Y); //<---
}



this.Location = ...; will cause the form to change its location, which in turn trigger another LocationChanged event.
So you are trapped till a stack overflow.
ramboo2002 2008-06-27
  • 打赏
  • 举报
回复
接分 !!
minioreo 2008-06-27
  • 打赏
  • 举报
回复
Form_Load里为何要调用Onload?
一般是自己form的Onload要override基类的Onload的时候才会调用基类的Onload 而一般基类的Onload会调用所以加在Load事件上的事件处理器 可能问题出在这了吧 FormLoad中调用Onload 而Onload紧接着又调用FormLoad 循环下去 于是栈溢出了
aijinjin 2008-06-27
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20080627/10/a2001d88-d940-4e8b-a59d-bf89baa6e1e6.html

http://topic.csdn.net/u/20080627/10/4736581d-9ffd-4b49-8ff7-3e1c6b4ce5db.html

本人windiewang 道歉散分贴

回帖我散分!
night__cat 2008-06-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 abc83915 的回复:]
不太清楚。。帮顶一下
[/Quote]
aijinjin 2008-06-27
  • 打赏
  • 举报
回复
C# 2005 express 突然发现 窗体的 属性栏不可用,工具箱也不能用了

不知道如何解决,只能尝试卸掉 重新安装!
windiewang1984 2008-06-27
  • 打赏
  • 举报
回复
首先感谢yatobiaf兄弟宽宏大量!

小弟愚笨,不识时务,请见谅!

今天打开C# 2005 express 突然发现 窗体的 属性栏不可用,工具箱也不能用了。

不知道为何? 只能尝试重装!

第2个问题,我重装前 试了下

简单贴下代码
        public partial class Form2 : Form
{
private Form1 m_form1;
public Form2()
{
InitializeComponent();
this.StartPosition = FormStartPosition.Manual;
this.WindowState = FormWindowState.Normal;

}

private void Form2_Load(object sender, EventArgs e)
{
this.m_form1 = (Form1)this.Owner;
this.m_form1.LocationChanged += new EventHandler(form1_LocationChanged);
base.OnLoad(e);

}


private void form1_LocationChanged(object sender, EventArgs e)
{
this.Location = new Point(this.m_form1.Location.X + this.m_form1.Width, this.m_form1.Location.Y);
}
}



    public partial class Form1 : Form
{
private Form2 m_form2;
public Form1()
{
InitializeComponent();
this.m_form2 = new Form2();
this.m_form2.Owner = this;
}

private void Form1_Load(object sender, EventArgs e)
{
this.m_form2.Location = new Point(this.Location.X + this.Width,this.Location.Y );
this.m_form2.Show();
base.OnLoad(e);
}
}


this.m_form1.LocationChanged += new EventHandler(form1_LocationChanged);这里会出现
未处理的“System.StackOverflowException”类型的异常出现在 mscorlib.dll 中。

当我把private void Form1_Load下的代码 写在protected override void OnLoad(EventArgs e) 下是就没问题。

protected override void OnLoad(EventArgs e) 是原网上作者写的函数。我认为在form_load也可以。所以尝试了下!
ljm66 2008-06-27
  • 打赏
  • 举报
回复
Onload函数和Form_Load函数好像是加载的时间不同,Onload是在窗体创建前,Form_Load是在窗体创建之后
abc83915 2008-06-27
  • 打赏
  • 举报
回复
不太清楚。。帮顶一下
yatobiaf 2008-06-27
  • 打赏
  • 举报
回复
1,返回值void的时候可以按地址传递的参数(指针或者引用)来传递对象信息。可如果你C#中DLLImport的时候不认这个返回值类型,当参数传递一样认不出来。你在C#应该定义了一个一模一样的结构,为什么会认不出来呢,有什么报错?
2,Form_Load是窗口load消息回调函数的默认函数名,Onload估计是那个参考代码改的名字。你报了什么错?
anxin1015 2008-06-27
  • 打赏
  • 举报
回复
先关注一下!
windiewang 2008-06-27
  • 打赏
  • 举报
回复
我将TxObject定义为class
然后new一个TxObject的对象,将这个对象作为参数传给中介的dll,然后返回这个对象。

不知道可行吗?



[Quote=引用 23 楼 yatobiaf 的回复:]
引用 22 楼 aijinjin 的回复:
把struct改成class, 是把我的TxObject改成class吗?

改成class之后还能作为函数的返回值吗??


引用 21 楼 yatobiaf 的回复:
第二个问题,把你C#中struct改成class试试,我看网上也有人遇到类似的问题,没有很好的解决。反正我是用class的没有问题。


可以的,C#中struct是值类型,class是引用类型。改完class后注意C++中的函数返回的要是一个TxObject类型的指针
[/Quote]
aijinjin 2008-06-27
  • 打赏
  • 举报
回复
不好意思,公司人都是做C++的

没人做C#

[Quote=引用 25 楼 diablososi 的回复:]
為什么不問。公司的前輩????

你是個新人,應該多像你們的前輩學習~
[/Quote]
diablososi 2008-06-27
  • 打赏
  • 举报
回复
為什么不問。公司的前輩????

你是個新人,應該多像你們的前輩學習~
diablososi 2008-06-27
  • 打赏
  • 举报
回复
總喜歡不勞而獲
yatobiaf 2008-06-27
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 aijinjin 的回复:]
把struct改成class, 是把我的TxObject改成class吗?

改成class之后还能作为函数的返回值吗??


引用 21 楼 yatobiaf 的回复:
第二个问题,把你C#中struct改成class试试,我看网上也有人遇到类似的问题,没有很好的解决。反正我是用class的没有问题。
[/Quote]

可以的,C#中struct是值类型,class是引用类型。改完class后注意C++中的函数返回的要是一个TxObject类型的指针
aijinjin 2008-06-27
  • 打赏
  • 举报
回复
把struct改成class, 是把我的TxObject改成class吗?

改成class之后还能作为函数的返回值吗??



[Quote=引用 21 楼 yatobiaf 的回复:]
第二个问题,把你C#中struct改成class试试,我看网上也有人遇到类似的问题,没有很好的解决。反正我是用class的没有问题。
[/Quote]
yatobiaf 2008-06-27
  • 打赏
  • 举报
回复
第二个问题,把你C#中struct改成class试试,我看网上也有人遇到类似的问题,没有很好的解决。反正我是用class的没有问题。
aijinjin 2008-06-27
  • 打赏
  • 举报
回复
哪位兄弟帮忙看看问题一啊

神之泪花 2008-06-27
  • 打赏
  • 举报
回复
路过,学习一下....
加载更多回复(8)

110,536

社区成员

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

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

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