activex 事件 我写了一个activex,调用方法可以,但是事件在一台机器上用vb可以有返回,另外一个机器上没有,没有返回的那个机器在tstcon32中有返回,请问谁碰到过这种问题,折磨我1周了。activex用c#写的,另外一个开发人员用vb6调用。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 要看问题出在哪?是C#还是VB?我只能估计是C#的代码问题,也不能具体回答你什么。这样要人帮你瞎猜很难猜的,你应该整理好要问的东西好好问。反正我从你题目所能了解到的就是“你有一个C#开发的组件,然后VB调用,最后是有问题了,然后叫别人猜你的问题在哪”。你的控件主要要实现什么功能?什么时候哪里出现了问题?你的环境因素是怎样?你可以肯定哪里没问题?你估计哪里有问题?你估计出问题的地方具体情况是怎样?......呵呵,好像是我在问你问题。 如果方便的话,请把那个activex放在网上,让大家都来测试一下,也许能发现问题,瞎猜咋行? SupermanKing 程序是参照红马那个程序写的,只是多加了些事件响应,全部代码挺多的贴一部分吧下面的代码是activex的声明中的一部分 [ComVisible(false)] public delegate void DeviceError(string 设备名称); [ComVisible(false)] public delegate void DeviceRunning(string 设备名称); #region 主体类接口 [Guid("FF1359CB-A77A-4aeb-9840-1FF989CF02CF"), InterfaceType(ComInterfaceType.InterfaceIsDual)] public interface Ir_Interface { void FireDevComUsed(string param); //4.3 设备串口被占用 void FireDeviceRuned(string param); //4.6 设备已运行 } #endregion #region 这里添加事件 [Guid("A67FF4CD-44A0-404f-9FFA-319E88958602"), InterfaceType(ComInterfaceType.InterfaceIsDual)] public interface IDeviceRunEvents { [DispIdAttribute(4)] void DevComUsed(string DeviceName); [DispIdAttribute(6)] void IdentifyDevUsed(string DeviceName); } #endregion #region 主体类 [Guid("2AD88D09-C8FA-4e63-9040-A300226DB381")] //guid. [ClassInterface(ClassInterfaceType.AutoDispatch)] //必须的,否则无法调用 [ComSourceInterfaces(typeof(IDeviceRunEvents))] [ProgId("Machine.DeviceRun")] //控件名 public class EventObj :Ir_Interface { #region 事件定义 #region 设备状态事件 /// <summary> 4.3 设备串口被占用 /// 传动串口被占用 /// </summary> public event DeviceError DevComUsed; /// <summary> 4.6 设备已运行 /// 发卡设备已运行 /// </summary> #endregion #endregion #region 事件体,执行com事件 public void FireDevComUsed(string param) { if (DevComUsed != null) DevComUsed(param); } public void FireDeviceRuned(string DeviceName) { if (DeviceRuned != null) DeviceRuned(DeviceName); } #endregion } #endregion #endregion [GuidAttribute("F321BAC9-5019-4c6f-BADF-8D104A499870")] [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsDual)] public interface ISharpCOMInterface { EventObj ObjDevComUsed { get; set; } EventObj ObjDeviceRuned { get; set; } void SetConfig(); void SetConfig(string File); void Init(); void next() } [GuidAttribute("03018F99-263B-417e-94F3-F367471F6679"), InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)] public interface ICSharpCOMEvents { [DispIdAttribute(3)] void DevComUsed(string DeviceName); [DispIdAttribute(6)] void DeviceRuned(string DeviceName); } [Guid("7F8DF713-8277-478c-8288-12E96DFEBC69")] [ClassInterface(ClassInterfaceType.None )] [ComSourceInterfacesAttribute(typeof(Machine.ICSharpCOMEvents))] [ProgIdAttribute("Machine.DeviceRun_2")] //控件名 public partial class DeviceRun_2 : UserControl, ISharpCOMInterface { #region .net事件定义 #region 设备状态事件 [Category("Action")] /// <summary> 4.3 设备串口被占用 /// 传动串口被占用 /// </summary> public event DeviceError DevComUsed; [Category("Action")] /// <summary> 4.6 设备已运行 /// 发卡设备已运行 /// </summary> public event DeviceRunning DeviceRuned; #endregion #endregion }}//下面的代码是执行过程中的一部分,也就是当执行到这里时调用上层程序中的事件函数(见下面vb代码) if(DeviceRuned !=null ) DeviceRuned(DeviceName); //通知设备开始运行//这里是vb代码Private Sub DeviceRun_21_DeviceRuned(ByVal DeviceName As String) '已经开始发行流程事件通知, msgbox "运行了"End Sub 很可能是那台机器上没有framework.这个东西我做过,不过做ActiveX还是不要用C#。 VB提示缺少数组的问题 在vba中,怎么控制recordset的行数? Webbrowser如何实现提交用户名跟密码!菜鸟!!(急等用!!) 帮帮忙拉~~ 如何把vb工程文件打包成系统安装文件一个简单问题之30分 vb如何制作网游登陆器 寻找一个可以根据数据库表生成DELPHI和VB类的软件(现在一下找不到了,以前下载过) 几个real控件在同一个窗体中播放不同节目 怎样在VB中运行SQL中的语法呢? 请教1个关于SQL查询语句的引号问题~谢谢~ 车牌号码识别 如何在控件里播放powerpoint
这样要人帮你瞎猜很难猜的,你应该整理好要问的东西好好问。
反正我从你题目所能了解到的就是“你有一个C#开发的组件,然后VB调用,最后是有问题了,然后叫别人猜你的问题在哪”。
你的控件主要要实现什么功能?什么时候哪里出现了问题?你的环境因素是怎样?你可以肯定哪里没问题?你估计哪里有问题?
你估计出问题的地方具体情况是怎样?......
呵呵,好像是我在问你问题。
下面的代码是activex的声明中的一部分
[ComVisible(false)]
public delegate void DeviceError(string 设备名称);
[ComVisible(false)]
public delegate void DeviceRunning(string 设备名称); #region 主体类接口
[Guid("FF1359CB-A77A-4aeb-9840-1FF989CF02CF"), InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface Ir_Interface
{
void FireDevComUsed(string param); //4.3 设备串口被占用
void FireDeviceRuned(string param); //4.6 设备已运行
}
#endregion #region 这里添加事件
[Guid("A67FF4CD-44A0-404f-9FFA-319E88958602"), InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IDeviceRunEvents
{
[DispIdAttribute(4)]
void DevComUsed(string DeviceName);
[DispIdAttribute(6)]
void IdentifyDevUsed(string DeviceName);
}
#endregion #region 主体类
[Guid("2AD88D09-C8FA-4e63-9040-A300226DB381")] //guid.
[ClassInterface(ClassInterfaceType.AutoDispatch)] //必须的,否则无法调用
[ComSourceInterfaces(typeof(IDeviceRunEvents))]
[ProgId("Machine.DeviceRun")] //控件名 public class EventObj :Ir_Interface
{
#region 事件定义 #region 设备状态事件
/// <summary> 4.3 设备串口被占用
/// 传动串口被占用
/// </summary>
public event DeviceError DevComUsed;
/// <summary> 4.6 设备已运行
/// 发卡设备已运行
/// </summary>
#endregion
#endregion #region 事件体,执行com事件
public void FireDevComUsed(string param)
{
if (DevComUsed != null)
DevComUsed(param);
}
public void FireDeviceRuned(string DeviceName)
{
if (DeviceRuned != null)
DeviceRuned(DeviceName);
}
#endregion
}
#endregion #endregion
[GuidAttribute("F321BAC9-5019-4c6f-BADF-8D104A499870")]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsDual)]
public interface ISharpCOMInterface
{
EventObj ObjDevComUsed
{
get;
set;
}
EventObj ObjDeviceRuned
{
get;
set;
}
void SetConfig();
void SetConfig(string File);
void Init();
void next()
} [GuidAttribute("03018F99-263B-417e-94F3-F367471F6679"),
InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
public interface ICSharpCOMEvents
{
[DispIdAttribute(3)]
void DevComUsed(string DeviceName);
[DispIdAttribute(6)]
void DeviceRuned(string DeviceName); } [Guid("7F8DF713-8277-478c-8288-12E96DFEBC69")]
[ClassInterface(ClassInterfaceType.None )]
[ComSourceInterfacesAttribute(typeof(Machine.ICSharpCOMEvents))]
[ProgIdAttribute("Machine.DeviceRun_2")] //控件名
public partial class DeviceRun_2 : UserControl, ISharpCOMInterface
{ #region .net事件定义
#region 设备状态事件
[Category("Action")]
/// <summary> 4.3 设备串口被占用
/// 传动串口被占用
/// </summary>
public event DeviceError DevComUsed;
[Category("Action")]
/// <summary> 4.6 设备已运行
/// 发卡设备已运行
/// </summary>
public event DeviceRunning DeviceRuned; #endregion
#endregion
}
}//下面的代码是执行过程中的一部分,也就是当执行到这里时调用上层程序中的事件函数(见下面vb代码) if(DeviceRuned !=null )
DeviceRuned(DeviceName); //通知设备开始运行//这里是vb代码
Private Sub DeviceRun_21_DeviceRuned(ByVal DeviceName As String)
'已经开始发行流程事件通知,
msgbox "运行了"
End Sub