我有一个内置于excel插件的Windows C++
应用程序。我的应用程序通过OCCI (https://www.oracle.com/database/technologies/appdev/oci.html
链接到oracle 12客户端。
在运行时,程序将延迟加载Oracle dll’s
,例如ocil.dll, oraons.dll, OraOCIEI12.dll.
请注意,由于dll存储在文件服务器上(未在用户的Windows PATH
变量中设置),因此dll设置为延迟加载,程序要做的第一件事就是设置此位置。
我们有一些用户将我们的excel插件与自己的使用VBA
的{{1}}代码结合在一起。问题是我们的用户均未在自己的计算机上安装oracle ODBC driver
。它们改为运行oracle 11客户端,并且不允许升级。
Oracle名称中没有版本依赖性; oracle 11和12客户端都依赖于oracle 12 client
,依此类推。dll依赖于版本,它们的名称不依赖于。
崩溃有两种:
我们的应用程序链接到从以下位置下载的SDK库: https://www.oracle.com/technetwork/topics/winsoft-085727.html (instantclient-sdk-nt-12.2.0.1.0.zip) 由于我们使用Visual Studio 2017和MSCV 14.14编译器进行编译,因此我们的应用程序必须链接到oracle 12。
我可以以某种方式使其同时加载两个oracle客户端吗?
我查看了oracle头文件,其中没有任何文件指定需要加载的dll的名称。我们的应用程序链接到oci.dll, oraons.dll
,在那里我可以看到oci.lib
的多次出现。也许我可以用“OCI.dll”
代替它们?
我也找到了此页面:
我尝试过。当我做一个明确的“OCI12.dll”
时,我可以在调试器中看到我正在加载用清单设置的那个。但是,当我随后进行使用oracle的实际函数调用时,它正在加载OCI.dll(在我们的文件服务器上),并与其他3个oracle dll一起加载:LoadLibraryA("oci.dll")
。也许这与oracle如何加载dll有关?
为完整起见,用户在其VBA代码中执行以下操作:
oraocci12d.dll, OraOCIEi12,dll and oraons.dll
先谢谢了。 内尔