我必须在Visual Studio 2013中编写程序,但它不起作用,所以我开始使用Microsoft Excel及其开发游乐场测试所有可能性。我开始使用以下版本(由提供我需要使用的程序的公司提供):
Sub Main()
Dim XServer As X2000.Server
Dim XApp As X2000.Application
Dim XSR As X2000.ScriptRoutines
Set XServer = New X2000.Server
Set XApp = XServer.AppConnection() '<- This actually fires the application
XApp.Visible = True
Set XSR = XApp.ScriptCommands
XSR.DATA_FILENAME = "C:\X2000\myFile.x" ' <- Code blocks here
End Sub
这基本上启动应用程序X2000.exe,将我的代码连接到它,然后通过在程序中加载DATA_FILENAME
来执行myFile.x
赋值例程。我需要启动该应用程序,因为此时它的许可证已经过检查,我没有其他选择可以使用。
现在,在这个版本中,代码在最后一行阻塞了&#34;缺少一个dll&#34;没有任何其他信息。我通过执行以下操作尝试对ScriptRoutines
对象进行后期绑定:
Dim XServer As X2000.Server
Dim XApp As X2000.Application
Dim XSR As Object
Set XServer = New X2000.Server
Set XApp = XServer.AppConnection()
XApp.Visible = True
XSR = CreateObject("XApp.ScriptCommands")
这也不起作用,但确实给了我一些信息:&#34; ActiveX控件无法加载对象&#34;。我做了一些研究,并通过&#34; Dependancy Walker&#34;发现,X2000.exe
取决于MSVBVM60.DLL
,system32
文件夹中缺少system32
。好奇,因为我的系统是64位,Excel也是,我在VS2013上使用32位兼容性尝试了代码,但代码仍无法正常工作。
我安装了the service pack from Microsoft,其中包含此文件,但发现sysWoW64
未被触及...
MSVBVM60.DLL
代之以X2000.exe
,因此我怀疑function [Data,eng_or_met] = Read_X2000_File_BB_2(sFileName)
XServer = actxserver('X2000.server');
XApp = XServer.AppConnection;
XApp.Visible = 1;
objX2000 = XApp.ScriptCommands;
objX2000.data_filename = "C:\X2000\myFile.x";
delete(XServer);
只是为了与32位系统一起工作:我错了。
我的一位同事可以执行用MATLAB代码编写的相同程序:
Dim XSR As Object
Set XSR = CreateObjectx86("XApp.ScriptCommands") ' create ActiveX via x86 mshta host
此代码的工作归功于actxserver
function,我相信它可以解决此兼容性问题。
如何使用Excel / VS2013执行相同的操作?
修改
我尝试使用omegastripes建议的代码:
CreateObjectx86
If / Else
函数linked here。我尝试了两个Set CreateObjectx86 = oWnd.CreateObjectx86(sProgID)
条件,最后无论如何都没有创建对象,包括:
Set CreateObjectx86 = CreateObject(sProgID)
和
#If Win64
如果我不更改代码(因此不是Dim XServer As Object
Dim XApp As X2000.Application
Dim XSR As X2000.Script
Set XServer = CreateObject("X2000.Server")
Set XApp = XServer.AppConnection()
XApp.Visible = True
Set XSR = X2000.ScriptCommands
),最后一行就会被执行。
修改
根据这个问题的第一个答案,我也尝试过:
<add name="sometablecontext" connectionString="Server=tcp:someservername.database.windows.net,1433;Initial Catalog=databasename;Persist Security Info=False;User ID=username;Password=password;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30" providerName="System.Data.SqlClient"/>
只是发现我得到了同样的错误。
答案 0 :(得分:1)
我显然已经解决了这个问题。受Hans Passant的启发,Dim
将XServer
作为唯一对象,具体取决于对X2000.exe的引用:
Dim XServer As X2000.Server
Dim XApp As Object
Dim XSR As Object
Set XServer = New X2000.Server
Set XApp = XServer.AppConnection
XApp.Visible = True
Set XSR = XApp.ScriptCommands
XSR.DATA_FILENAME = "C:\foo.x"
DATA_FILENAME
实际上是一个被执行的“ScriptCommand”。
这很简单。但我不知道为什么会这样。