【问题标题】:Cannot instantiate automation variable无法实例化自动化变量
【发布时间】:2015-01-02 15:05:46
【问题描述】:

我需要注册第 3 方 dll,然后将其用作 navision 中的自动化变量。 我通过 regasm "path/to/dll" 注册了它。我可以在子类型窗口中看到这个库并选择它作为变量。当我尝试运行应该运行代码的按钮时,发生运行时异常。听起来像:“无法创建由 {DF5505B6-7551-424C-B4F6-CBE380C60DB1}1.3{GUID FROM MY ASSEMBLY.CS}:NavisionInterface.CurrencyHelper 识别的 OLE 共振峰或自动化服务器。检查您的 OLE 共振峰或自动化服务器已正确安装或注册。这就是我的代码的样子:

[Guid("DC9690B5-BB82-42A1-8C64-AF3E2CA38FD6")]
public interface NavisionHelper
{
    double GetCurrency(string code, string year, string month, string day);
    void MakeFilesActualization();
}

[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public class CurrencyHelper : NavisionHelper
{
    public CurrencyHelper() { }
    [ComVisible(true)]
    public double GetCurrency(string code, string year, string month, string day)
    {
        var dbOp = new DatabaseOperations();
        return dbOp.getCurrency(code, year, month, day);
    }
    [ComVisible(true)]
    public void MakeFilesActualization()
    {
        NBP nbp = new NBP();
        DatabaseOperations db = new DatabaseOperations();
        var existingTableNames = db.GetTableNames();
        nbp.DownloadData(existingTableNames, curr => db.AddCurrencyData(curr));
    }
}

这就是我尝试在 navsion 2009 中运行的方式:

IF( ISCLEAR(obj)) THEN
 CREATE(obj,TRUE,TRUE);
obj.MakeFilesActualization();
CLEAR(obj);

【问题讨论】:

  • 可能是您的自动化服务器无法找到它的一个或多个依赖项?

标签: c# dll microsoft-dynamics navision


【解决方案1】:

也许应用程序不知道在哪里可以找到您的 dll 文件。使用 reagasm 时使用 /codebase 选项。

【讨论】:

  • 您能否指出一些文档来证明 /codebase 选项的合理性?
  • 这里是来自 msdn 的文档:msdn.microsoft.com/en-us/library/tzat5yw6(v=vs.110).aspx,每个人都已经找到了。但是,前几天我遇到了同样的问题,情况是这样的:使用 dll 的应用程序(我的例子:MS NAV 5)只是在当前文件夹中搜索可执行文件的位置。如果你不把dll放在那里,你必须使用codebase指定它的绝对路径。
猜你喜欢
  • 2021-11-30
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-05
  • 2012-04-15
  • 2011-11-19
  • 2014-05-09
相关资源
最近更新 更多