C#生成dll与调用

生成COM组件与调用指南

生成COM组件

1.打开VS,[文件]->[新建]->[项目]->[类库]

2.编辑新生成class代码,EG

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TTT
{
    public interface MyInterface
    {
        int add(int a, int b);
    }

    public class MyClass : MyInterface
    {
        public int add(int a, int b)
        {
            return a + b;
        }
    }
}

 3.编辑AssemblyInfo.cs文件

将assembly:ComVisible(false)改为true

4.在项目上右键——属性

(1.应用程序——程序集信息——选中“使程序集COM可见”

(2.生成——选中“为COM互操作注册”

(3.签名——选中“为程序集签名”,去掉“使用密码保护密钥文件”

5.生成

 

 

 

调用COM组件

1.引用刚生成的dll,直接引路径也行

2.引用dll的命名空间,EG:using TTT

3.可以调用ttt里边的类了

完成

### 使用C#生成DLL并在Java中调用 #### 在C#生成DLL 要在C#生成DLL文件,需要使用Visual Studio或者使用命令行工具`csc`(C#编译器)。以下是一个简单的示例,展示如何创建一个包含方法的DLL。 ##### 示例C#代码 ```csharp using System; namespace MyTest { public class TestClass { public int Sum(int a, int b) { return a + b; } } } ``` ##### 生成DLL 1. **使用Visual Studio**: - 创建一个类库项目。 - 将上述代码粘贴到项目中的适当位置。 - 构建项目,生成DLL文件将位于项目的`bin`目录下。 2. **使用命令行**: - 打开命令提示符,导航到包含代码的目录。 - 运行以下命令: ```bash csc /target:library /out:MyTest.dll TestClass.cs ``` #### 在Java中调用C#生成DLL Java不能直接调用C#编写的DLL。通常有以下几种方法可以实现这一点: ##### 方法一:使用JNI4NET JNI4NET是一个允许Java和.NET之间进行互操作的库。以下是使用JNI4NET调用C# DLL的基本步骤。 1. **安装JNI4NET**: - 下载并安装JNI4NET库。 - 确保将JNI4NET的DLL文件添加到系统路径中。 2. **修改C#代码以支持JNI4NET**: - 在C#项目中添加对JNI4NET的引用。 - 修改代码以使用JNI4NET的API。 3. **Java代码示例**: ```java import helloworld.Hello; import net.sf.jni4net.Bridge; import java.io.File; import java.io.IOException; public class Test { public static void main(String[] args) throws IOException { Bridge.setVerbose(true); Bridge.init(); File dll = new File("HelloWorld.j4n.dll"); Bridge.LoadAndRegisterAssemblyFrom(dll); int result = Hello.display(66, 22); System.out.println("计算结果为:" + result); } } ``` ##### 方法二:使用COM组件 另一种方法是将C# DLL封装为COM组件,然后在Java中使用Jacob库调用COM组件。 1. **将C# DLL注册为COM组件**: - 在C#项目中启用COM可见性。 - 使用`regasm`工具注册DLL: ```bash regasm MyTest.dll /tlb:MyTest.tlb ``` 2. **Java代码示例**: ```java import com.jacob.com.*; import com.jacob.activeX.*; public class TestCOM { public static void main(String[] args) { ActiveXComponent component = new ActiveXComponent("MyTest.TestClass"); Dispatch dispatch = component.getObject(); Variant result = Dispatch.call(dispatch, "Sum", new Variant(66), new Variant(22)); System.out.println("计算结果为:" + result.getInt()); } } ``` #### 注意事项 - 确保在调用C# DLL时,Java环境和DLL的架构(32位或64位)一致。 - 在使用JNI4NET或Jacob时,确保所有依赖项都已正确安装和配置[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值