q52450952 2015-11-25 02:32 采纳率: 0%
浏览 1956

求助c#写com组件有毒 看了无数文章也无法公开一个类中的函数

看了无数文章和博客尝试了无数方法依然无法解决这个问题 编译的com组件永远只有
_object 下的的几个函数自定义的函数一个也没有

下面是看着无数文章写的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using System.Windows.Forms;


namespace HK.NetPBDemo
{
        [Guid("D11FEA37-AC57-4d39-9522-E49C4F9826BB"),  

   InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]  

    public interface MyCom_Events

    {  
    } 


[ComVisible(true)]
    [Guid("2E3C7BAD-1051-4622-9C4C-215182C6BF58"),

      ClassInterface(ClassInterfaceType.None),

      ComSourceInterfaces(typeof(MyCom_Events))]

    public class HKTest:IHK 
    {
        [ComVisible(true)]
        public int TestFunction(int num, string str1, string str2, double dbc)
        {

            MessageBox.Show(string.Format( "int data is {0};string data is {1} and {2}; double data is {3}",num,str1,str2,dbc));
            return num + str1.Length + Convert.ToInt32(dbc);
        }
        [ComVisible(true)]
        public static void MesageBox(string mes)
        {
            MessageBox.Show(mes);
        }

        public int Get
        {
            get
            {
                return 5;
            }
        }
    }
}

接口定义

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace HK.NetPBDemo
{
    [ComVisible(true)]
    public interface IHK
    {
        [DispId(1)]
        int TestFunction(int num, string str1, string str2, double db);
    }
}

AssemblyInfo.cs

 using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("cSharpComTest")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("cSharpComTest")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2015")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: AssemblyKeyName("HK.NetPBDemo.snk")]
//将 ComVisible 设置为 false 将使此程序集中的类型
//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型,
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(true)]

// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("d33a34d1-be23-4df1-82d8-ca76519ef4c8")]

// 程序集的版本信息由下列四个值组成: 
//
//      主版本
//      次版本
//      生成号
//      修订号
//
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
// 方法是按如下所示使用“*”: :
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.1.0.0")]
[assembly: AssemblyFileVersion("1.1.0.0")]

整个项目的大概截图

图片说明

整个工程代码 百度下载
http://pan.baidu.com/s/1nt4G3G1

然后是整个工程编译后再外部的内容
能看到公开的类
图片说明
看不到公开的自定义函数
只能看到_object下的几个函数
图片说明
救命……

  • 写回答

1条回答 默认 最新

  • threenewbee 2015-11-25 04:00
    关注

    按理说应该很简单就能实现的。首先,你有没有用regasm注册,你的guid是否和别的冲突,你之前有没有注册了一个没有函数的com版本。然后,你用的什么对象浏览器看的。

    评论

报告相同问题?

悬赏问题

  • ¥20 iqoo11 如何下载安装工程模式
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?