贡献所有的分,大家来帮忙,小弟实习的问题,谢谢各位,尤其感谢gomoku

windiewang 2008-06-26 11:56:48
小弟我在一公司实习,这是我最近要做的项目。

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. 如何固定两个窗体的位置? 我上次做的WindowsMediaPlayer窗体上有一个透明窗体,我需要在透明窗体上绘图,

现在情况是我想要WindowsMediaPlayer窗体和透明窗体一起动,比如我拖动WindowsMediaPlayer窗体,那透明窗体

也跟着动,始终保持两个窗体的相对位置不变?

这个如何实现? 谢谢!

3. 另外关于中介C++中.h的问题

我在这个.h中include了博士模块的所有头文件,在我的.h中将所有的变量指针都声明好,然后cpp中就直接include我的.h

就可以。那我这些变量指针声明怎么写?是放在一个struct中还是一个class中。在cpp中如何使用呢?


问题有点多,可能说得不太清楚,请见谅。

小弟新人实习,比较菜,希望得到大家的帮助,这次把所有的分都贡献出来。

谢谢各位,尤其感谢gomoku!!

...全文
159 点赞 收藏 22
写回复
22 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
帮顶~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!
回复
windiewang 2008-06-27
原谅我一次吧!!!
回复
windiewang 2008-06-27
对不起,不是我要倒分,主要是无满意答案!

对不起!!
回复
yatobiaf 2008-06-27
楼主是个及其不厚道倒分的家伙,参见
http://topic.csdn.net/u/20080624/11/b46fee8a-9b03-48e4-a455-0f6aadd43443.html
bs你。
回复
minioreo 2008-06-27
mark
回复
windiewang 2008-06-26
自己顶上去。。。。。。。。
回复
aspnet30 2008-06-26
帮顶!!
回复
DongloveRen 2008-06-26
帮顶!
回复
halk 2008-06-26
楼上的,long对应的确实是int。在IA32体系中,longlong才是Int64。
回复
yatobiaf 2008-06-26
1,long 对应的是int?long对应的是long或者是int64吧。
2,窗体A的事件里面,添加一个LocationChanged事件。
然后我写个大概的意思吧

B.Location.X = this.Location.X+this.Width;
B.Location.Y = this.Locaiton.Y;
回复
windiewang1984 2008-06-26
窗体的LocationChanged函数如何写

能使改变要跟随窗体的位置?

就是让一个窗体跟着另外一个窗体!
回复
windiewang1984 2008-06-26
typedef struct TxObject
{
long status;
TxRegion BaseRgn; //基准区域
long RecogID; //识别状态标志,0是未识别
POINT Contrail[MAXPOINTS]; //对象的运动轨迹(轨迹长度同生命长度)
} TxObject;

typedef struct tagPOINT
{
LONG x;
LONG y;
} POINT, *PPOINT, NEAR *NPPOINT, FAR *LPPOINT;

typedef struct TxRegion
{
long cx; ///< the x-coordinate of the upper-left corner
} TxRegion;



C++中结构是这样的。下面是我重写的C#。


[StructLayout(LayoutKind.Sequential)]
struct TxObject
{
public int status;
public TxRegion BaseRgn; //基准区域
public int RecogID; //识别状态标志,0是未识别
[MarshalAs( UnmanagedType.ByValArray, SizeConst=2000 )]
public POINT[] Contrail;
}
[StructLayout(LayoutKind.Sequential)]
struct TxRegion
{
public int cx; ///< the x-coordinate of the upper-left corner
}

[StructLayout(LayoutKind.Sequential)]
struct POINT
{
public int x;
public int y;
}


编译没问题,运行的时候会报”方法的类型签名与 PInvoke 不兼容“ 的错误。

回复
windiewang1984 2008-06-26
帮顶上去!!!!!!!!
回复
yatobiaf 2008-06-26
1,你必须在C#中也定义一个TxObject,内存布局要和c++中的一模一样。
参见例子http://topic.csdn.net/u/20080624/12/78e85273-149e-4b43-80cf-6dad3cdec54b.html中的
10,11,17,18楼。
2,在窗口的LocationChanged消息回调函数中改变要跟随窗体的位置。
3,不明白你说的变量指针是干嘛用的。
回复
windiewang 2008-06-26
都没人会吗?? 郁闷!!!
回复
windiewang 2008-06-26
??什么意思? 公司没人用C#的,我过来实习,用C#给做个界面!

[Quote=引用 6 楼 liubiaocai 的回复:]
实习就做你们有技术的啊

[/Quote]
回复
lawbc 2008-06-26
实习就做你们有技术的啊
回复
windiewang 2008-06-26
我把C++的struct在C#中重写了一下

然后再C#的调dll函数时,出这个问题

”方法的类型签名与 PInvoke 不兼容“

是不是struct写的不正确?
回复
windiewang 2008-06-26
我的意思是 exe运行的时候 一起移动



[Quote=引用 3 楼 BIGBIRDINWOODS 的回复:]
midia窗口移动好之后,透明的位置坐标也设置为一样嘛
[/Quote]
回复
BIGBIRDINWOODS 2008-06-26
midia窗口移动好之后,透明的位置坐标也设置为一样嘛
回复
加载更多回复
相关推荐
发帖
C#
创建于2007-09-28

10.6w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2008-06-26 11:56
社区公告

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