在ASP中调用.NET的DLL

博客指出.NET的DLL是类或类库,不能直接在ASP等环境使用,可通过COM包装器实现功能。还给出具体示例,包括在.NET Visual Studio新建项目、添加类、创建密钥对、生成强命名程序集等步骤,最后在ASP中进行测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   .net的dll已经不是严格意义上的动态连接库了,而是一个类或者类库。它是不能直接在ASP、VB等其它的应用
环境中使用的。   我们可以通过COM包装器(COM callable wrapper (CCW))来将.net的dll再次包装,通过这个中间介质来实现相应的功能。

以下是一个小例子,供大家参考。
1. 在.net Visual Studio 中新建一个Class项目。
2. 在项目中新添加一个类,代码如下:

using System;

namespace ClassLibrary1
{


  //定义接口,这点很重要 (此接口中的方法与COM组件中的方法一致)
   public interface iClass1
   {

   string  test()  ;

   }


 public class Class1 : iClass1
 {
  
  private string t = "";
  //实现接口中的方法
  public string  test()
  {
  
   return "ok";
  }
 }
}

3.在.NET命令行窗口中,创建密钥对。
  可以用.net 自带的工具:sn.exe 来创建密钥对。
  如:SN –k testDll.Keys
4. 创建强命名程序集(Strong Name Assembly)
  在AssemblyInfo.cs文件中,添加[assembly: AssemblyKeyFile(@"c:/test.keys")]属性
 
5. 编译整个项目,生成ClassLibrary1.dll (此DLL可在 /bin/Debug 路径下找到。)
6. 在.NET命令行窗口中,生成类型库
   tlbexp ClassLibrary1.dll /out:ClassLibrary1.tlb

7. 在.NET命令行窗口中,注册装配件
   regasm /tlb:ClassLibrary1.tlb ClassLibrary1.dll

8. 在.NET命令行窗口中,将.NET装配件安装到全局装配件缓存(GAC)中
   gacutil /i ClassLibrary1.dll
  
9. 在asp中测试
  <%
  SET s = CreateObject("ClassLibrary1.Class1")
  Response.Write(s.test())
  %>

### Java 中调用 .NET DLL 的方法 在某些场景下,Java 应用程序可能需要调用.NET 编写的功能库(DLL)。以下是几种常见的实现方式及其注意事项。 #### 1. 使用 Jacob 实现 COM Interop Jacob 是一种流行的工具包,用于通过 COM 技术让 Java 和 Windows 平台上的其他技术交互。具体步骤如下: - 需要创建一个支持 COM 可见性的 C# 类库,并将其注册到系统中。 - 在 Java 程序中引入 Jacob JAR 文件以及对应的动态链接库 (jacob.dll 或 jacob-xx-x86.dll/jacob-xx-x64.dll)。 下面是一个简单的代码示例[^4]: ```java import com.jacob.activeX.ActiveXComponent; import com.jacob.com.ComThread; import com.jacob.com.Dispatch; public class Test { public static void main(String[] args) { try { ComThread.InitMTA(); // 初始化多线程环境 ActiveXComponent ax = new ActiveXComponent("YourDotNetClassLibrary.ClassName"); Dispatch d = ax.getObject(); Variant result = Dispatch.call(d, "MethodName", "Parameter"); // 调用方法并传递参数 System.out.println(result.toString()); ComThread.Release(); } catch (Exception e) { e.printStackTrace(); } } } ``` 此方法适用于能够将目标 .NET 组件暴露为 COM 对象的情况。 --- #### 2. 利用 IKVM 将 .NET Assembly 转换为 Java Class IKVM 是一款开源的 JVM 实现,它允许运行未经修改的 .NET 字节码。可以尝试使用 IKVM 工具链来转换现有的 .NET DLL 成为兼容 Java 的类文件 (.class),从而直接加载这些类并在 Java 环境下调用它们。 需要注意的是,这种方法可能会遇到一些局限性,特别是当依赖于特定平台功能或者第三方组件时[^3]。 --- #### 3. 创建中间层服务 另一种常见做法是构建 RESTful API 或者 gRPC 微服务作为桥梁连接两部分逻辑。即把包含业务逻辑的部分封装成独立的服务端应用部署起来;而客户端则仅需发送 HTTP 请求即可完成操作。这种方式的优点在于跨语言协作更加灵活自由不受限于操作系统差异等因素影响[^2]。 例如,在服务器端编写一段 ASP.NET Core 控制器暴露出所需接口供外部访问: ```csharp [ApiController] [Route("[controller]")] public class EncryptionController : ControllerBase { private readonly IEncryptionService _encryptionService; public EncryptionController(IEncryptionService encryptionService) { _encryptionService = encryptionService ?? throw new ArgumentNullException(nameof(encryptionService)); } [HttpPost] public IActionResult EncryptData([FromBody]string dataToEncrypt) { var encryptedResult = _encryptionService.Encrypt(dataToEncrypt); return Ok(new { EncryptedText = encryptedResult }); } } ``` 随后利用 HttpClient 发起同步/异步请求获取返回数据处理结果。 --- #### 特殊情况说明 如果被调用方涉及 WPF 用户界面控件或其他强制要求单一线程公寓模式(Single Thread Apartment Model - STA)的内容,则单纯依靠上述任一途径都难以奏效。此时建议调整设计架构重新规划解决方案路径[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值