C# 写的32位COM组件,如何在64位系统上注册

之前,用c#写了一个COM组件,可以被Delphi的程序调用,而且已经使用在几个项目中,部署环境在XP和WIN7 32位都可以正常运行.

但最近一个项目,部署环境是WIN7 64位系统.使用写好的bat文件注册不成功,

运行到 RegAsm 时,总时提示 无法定位输入程序集 '....dll'或它的一个依赖项.


看了下RegAsm的命令:

%WINDIR%\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe /codebase %WINDIR%\System32\*.dll


dll文件放到了C:\Windows\Syste32\下, 经过反复确认,路径没有问题.那肯定是依赖项的问题了.可是具体是什么原因呢.


首先推测是不是需要用64位的RegAsm.

顺着RegAsm的路径找下去,果然在 %WINDIR%\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe 下也找到了这个文件.


然后修改注册命令为:

%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe /codebase %WINDIR%\System32\*.dll

依然注册失败,不过提示的命令变成了"不是有效的程序集,因此未能加载它".

这里的问题很显然,是因为把32位的dll按64位来加载导致的.


然后我试着把程序编译成64位Dll, 用64位的RegAsm注册,结果提示注册成功.这个结果是可以预见到的.

但问题来了.我的Dll是需要让Delphi来使用的.而Delphi只能是32位程序.所以,Delphi打开的时候出现了问题.


这时我想,如果我把程序编译成AnyCPU,然后用64位的RegAsm注册,会怎么样呢?

经尝试后,结果是注册成功,但Delphi调用失败.


正在绝望的时候,看到了如下文章:  win7 64位下使用regsvr32注册activex dll

我的是不是也是这个问题呢.于是把文件放到C:\Windows\SysWOW64\下,修改注册命令,注册成功.

打开Delphi程序,界面成功显示出来.

你可能感兴趣的:(.net,C#,Delphi,COM组件)