大家应该遇到过64位office在vba里无法调用32位dll的问题。最近看到别人碰到了类似的问题。我就来啰嗦几句。
微软公司的官方网站针对这个问题描述如下:
在64位的windows系统中,一个64位进程不能加载一个32位dll,同理一个32位进程也不能加载一个64位dll。但是,64位windows支持64位和32位进程(包括本机或跨机)间进程间通信(RPC)。在64位windows中,一个进程外32位COM服务器能够与64位客户端进行通信,同样一个进程外64位COM服务器也能与32位客户端进行通信。因此,如果你有一个32位COM无法识别的DLL,你可以将它封装到一个进程外COM服务器中并在一个64位进程中用COM配置调用DLL。
上面那一段我自己来理解就是 dll/ocx是个单性恋,而进程外的com服务器是个双性恋,32/64通杀。
就拿之前我自己使用的scriptcontrol(在msscript.ocx里)只能用于32位的excel.今天我们就来解决怎么在64位的excel上使用官方的这个dll.
1.首先用VB6创建一个32位的com服务器。就是Activex exe这玩意。