activex 事件

super_xxx 2008-11-27 08:55:13
我写了一个activex,调用方法可以,但是事件在一台机器上用vb可以有返回,另外一个机器上没有,没有返回的那个机器在tstcon32中有返回,请问谁碰到过这种问题,折磨我1周了。activex用c#写的,另外一个开发人员用vb6调用。
...全文
232 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
宋风流 2011-09-15
  • 打赏
  • 举报
回复
很可能是那台机器上没有framework.这个东西我做过,不过做ActiveX还是不要用C#。
super_xxx 2008-11-30
  • 打赏
  • 举报
回复
没人碰到?
现在还是人类 2008-11-28
  • 打赏
  • 举报
回复
要看问题出在哪?是C#还是VB?我只能估计是C#的代码问题,也不能具体回答你什么。
这样要人帮你瞎猜很难猜的,你应该整理好要问的东西好好问。
反正我从你题目所能了解到的就是“你有一个C#开发的组件,然后VB调用,最后是有问题了,然后叫别人猜你的问题在哪”。
你的控件主要要实现什么功能?什么时候哪里出现了问题?你的环境因素是怎样?你可以肯定哪里没问题?你估计哪里有问题?
你估计出问题的地方具体情况是怎样?......
呵呵,好像是我在问你问题。
super_xxx 2008-11-28
  • 打赏
  • 举报
回复
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
jxsqs 2008-11-28
  • 打赏
  • 举报
回复
up
android2008 2008-11-28
  • 打赏
  • 举报
回复
up
SYSSZ 2008-11-28
  • 打赏
  • 举报
回复
如果方便的话,请把那个activex放在网上,让大家都来测试一下,也许能发现问题,瞎猜咋行?
韧恒 2008-11-28
  • 打赏
  • 举报
回复
楼上的太有才了,讲的句句是真理! ^_^
super_xxx 2008-11-27
  • 打赏
  • 举报
回复
编译过了也不行
king06 2008-11-27
  • 打赏
  • 举报
回复
在另一个机器上编译一下

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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