看了无数文章和博客尝试了无数方法依然无法解决这个问题 编译的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下的几个函数
救命……
按理说应该很简单就能实现的。首先,你有没有用regasm注册,你的guid是否和别的冲突,你之前有没有注册了一个没有函数的com版本。然后,你用的什么对象浏览器看的。