.Net and VBA (Excel) Interop issue -2147024894 (80070002)

好久没有写博客了

 

这次的问题是,.net下的dll如何在COM中使用。 

本机(win7)开发的时候, COM下,可以直接使用,一点问题也没有,但是导出dll到其他机器(windows xp, win 2003, win 7等)却一直存在如题所示的问题。

原因是在本机开发的时候,Visual Studio 会自动往注册表写一个:

HKEY_CLASSES_ROOT\CLSID\{71F5F31E-D86B-4FF1-89CA-BFCC3B8117BA}\InprocServer32\CodeBase=<path to your assembly>


但是其他机器却没有这个,咋办呢?

解决办法如下:

1. 如果你以前注册过,先unregister old dll

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>RegAsm.exe /unregister ./ClientDLL
/TransferFile.dll
Microsoft (R) .NET Framework Assembly Registration Utility 2.0.50727.3053
Copyright (C) Microsoft Corporation 1998-2004. All rights reserved.

Types un-registered successfully

 

2. 然后再次注册:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>RegAsm.exe /codebase ./ClientDLL/T
ransferFile.dll
Microsoft (R) .NET Framework Assembly Registration Utility 2.0.50727.3053
Copyright (C) Microsoft Corporation 1998-2004. All rights reserved.

Types registered successfully

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>

注意这里:在使用/codebase前, 你的dll必须是已经singed的,什么是signed?看下图:

 

最好,测试:

可以在Excel下,然后Alt+f11直接调出开发界面, 

测试代码:

Public Sub TestApp()
Dim obj As New TransferFile.TransferFile
Dim result As Boolean
result = False
result = obj.UploadFile("c:\xp_test.txt", "xp_test.txt", "D:\Test")
Debug.Print result
End Sub

 

搞定。

这里还有另外一种办法,那就是:

把DLL放到GAC里面。 然后重新注册。 这样注册的时候就可以无需/codebase了。

 

参考文章:http://social.msdn.microsoft.com/Forums/nl-NL/clr/thread/65dc0c4a-a426-41a0-9e80-c7de37b10c73

 

转载于:https://www.cnblogs.com/nevernet/archive/2012/04/03/2431118.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值