日期:2014-05-18  浏览次数:20996 次

c# callback 问题(立即给分)
我在c#里调用c++dll中的函数SetMessageProcessCallback(IntPtr pUserObject_, delegateSetMessage pfUserMessageProcessFunc_);我向这个函数中传了两个参数:this.Handle 和 delegateCallback1, 一个是form地址,一个是委托函数。

当程序启动后,运行到回调函数中时,就报错误:an unhandled win32 exception in 'ProprioWare.vshost.exe',

请高手帮忙。

------解决方案--------------------
this.Handle你直接传this看看
------解决方案--------------------
怀疑lz是不是散分的,这个问题问过多少遍了,你的前边几个帖子我都看过,你的代码写的不对,你的回调函数有2个参数,你写的回调函数没有参数,不出错才怪,你要把你用到的函数和结构体的C++源代码贴出来,给你翻译个完整版本就好了,有一次贴得比较全了,就是少一个什么MSG的也不知道什么类型的数据,怀疑是结构体,那你也要把这个翻译好,不然怎么弄你也过不去。
------解决方案--------------------
你的C++代码里边的AMC_MESG就翻译成byte了?你觉得正确吗?你把C++里的AMC_MESG确切定义发出来好不好,你为了这个问题发了不下5个帖子了,就是不发这个东西的类型定义,也不知道你想怎么混过这个东西的定义。
------解决方案--------------------
声明原型
C# 复制代码 
// Declares a class member for each structure element.
[ StructLayout( LayoutKind.Sequential )]public class SystemTime 
{
public ushort year; 

public ushort milliseconds; 
}

public class LibWrap 
{
// Declares a managed prototype for the unmanaged function.
[ DllImport( "Kernel32.dll" )]
public static extern void GetSystemTime( [In,Out] SystemTime st );
}
 

调用函数
C# 复制代码 
public class App
{
public static void Main()
{
SystemTime st = new SystemTime();
LibWrap.GetSystemTime( st );
Console.Write( "The Date and Time is: " );

}
}

传递类的例子,特别注意红字部分