先了解下几个知识点
1 java环境是无法直接引用.net程序集dll的
2 Com组件是啥?Com组件与语言无关,是平台之间中的动态链接,简单的理解,就是.Net环境中配置版的dll程序集
创建Com组件
1.创建接口配置文件等
新建项目,添加引用,按照以下代码格式封装接口
2.设置配置
1)项目->属性
切换到“生成”选项卡,在底部位置,勾选“为COM互操作注册”
2)项目->属性
切换到“签名”选项卡
勾选“为程序集签名”
在下面的下拉框里面选择“<新建...>”
在弹出的对话框里面,输入MyKey。。或者随便取个名字
去掉“使用密码保护文件(P)”的选项
3)
编译:生成->生成解决方案(F6)。如果没有生成.tlb文件,需要用管理员身份打开Visual Studio 2010,然后重新编译
注册过程:
开始→所有程序→Microsoft Visual Sutdio 2010→Visual Studio Tools→Visual Studio命令提示符(2010)〖注:以管理员身份运行〗(安装目录)
在命令提示符下面,进入Dll所在的目录
C:\Windows\system32>cd E:\MyLib\MyLib\bin\Debug
用 gacutil /i MyLib.dll 将这个DLL加入的全局缓存里
E:\MyLib\MyLib\bin\Debug>gacutil/i mylib.dll
然后用 regasm MyLib.dll 注册这个dll
E:\MyLib\MyLib\bin\Debug>regasm mylib.dll
注册Com组件
namespace CutGLibNew
{
[ComVisible(true), Guid("A1EFBACB-4566-4521-8059-B4D54F2EE08F")]
public interface CutGLibNewIfce
{
[DispId(1)]
void SetComputerLicenseKey(string aLicenseKey);
[DispId(2)]
void CompleteMode(bool mode);
[DispId(3)]
void SawWidth(double sawWidth);
[DispId(4)]
void TrimLeft(double trimLeft);
[DispId(5)]
bool AddLinearStock(double aLength, int aCount);
[DispId(6)]
bool AddLinearPart(double aLength, int aCount, string aID);
[DispId(7)]
string ExecuteLinear();
}
[Guid("4400DB9B-B79F-4328-8037-2268B5AE4B55"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface CutGLibNewIfce_Event
{
}
[Guid("02418074-E14E-4764-B1E9-10967C56B135"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(CutGLibNewIfce_Event))]
public class CutGLibHelper : CutGLibNewIfce
{
CutEngine cutEngine = new CutEngine();
public void SetComputerLicenseKey(string aLicenseKey)
{
cutEngine.SetComputerLicenseKey(aLicenseKey);
}
public void CompleteMode(bool mode)
{
cutEngine.CompleteMode = mode;
}
public void SawWidth(double sawWidth)
{
cutEngine.SawWidth = sawWidth;
}
public void TrimLeft(double trimLeft)
{
cutEngine.TrimLeft = trimLeft;
}
public bool AddLinearStock(double aLength, int aCount)
{
return cutEngine.AddLinearStock(aLength, aCount);
}
public bool AddLinearPart(double aLength, int aCount, string aID)
{
return cutEngine.AddLinearPart(aLength, aCount, aID);
}
public string ExecuteLinear()
{
return cutEngine.ExecuteLinear();
}
}
}