Delphi 6:通过COM

时间:2015-06-11 11:01:13

标签: .net delphi com machine-code

我们有一个用 Delphi 6 编写的应用程序,我们在其中生成并执行数学运算的机器代码(输入一个字符串 - >输出机器代码 - >调用很多次)。这已经很多(很多)年了。

我们最近添加了一些用C#编写的功能,并通过COM访问。 访问新功能可以正常工作。

如果计算中出现错误(例如超出范围或者除以0),我们就会遇到问题。

如果我们创建了COM对象的实例[注意:我们这里没有使用COM对象,只需调用CreateOleObject()来创建它],然后输入一个无效的计算(比如'1/0')我们得到一个我们可以陷阱和处理的异常。

但是,一旦我们创建了COM对象,我们就不再获得Div / 0异常。
  - 我们第一次调用它时,会得到StackOverflow异常   - 我们第二次调用它时,会收到一个无法捕获的访问冲突异常并导致应用程序崩溃。

  • 只要计算中没有错误,它就会正确执行。
  • 只要没有创建COM对象,我们可以根据需要多次调用无效计算,每次都会得到Div / 0错误
  • COM对象与计算无关,永远不会被调用,它似乎只是创建它导致问题
  • 目标计算机安装了.NET 4 Client Profile和.NET 4 Extended框架

我认识到这在使用方面相当远,但如果有任何想法,我会很感激帮助。感谢。

更新:
事实证明,我们在应用程序中使用其他.Net程序集,通过COM访问它们并且它们不会导致问题。我创建了2个简单的程序集,并使它们可以访问COM。一个目标是.Net 2.0(N2),另一个是.Net 4.0(N4)。它们都包含相同的GetMessage()函数来返回字符串。

他们都使用.Net 4注册 regasm (。Net 2 regasm 不认可4程序集有效)。如果我创建N2 COM对象的实例一切都很好但是创建N4 COM对象的实例会导致不良行为。在任何情况下我都不会调用GetMessage(),我只是创建COM对象。

更新:
似乎问题是.Net版本相关 在具有.Net 4.0 Client的计算机上,div / 0给出堆栈溢出异常,然后(在第二次调用时)崩溃。
在.Net 4.5.1的机器上,我得到一个div / 0异常,一切正常。
有什么想法4.5.1和4.0(客户端)如何处理数学协处理器异常之间可能有什么不同?

0 个答案:

没有答案