在装配负载上执行代码

时间:2009-06-13 03:04:03

标签: .net assemblies

我正在为一些巨大的非托管库工作。几乎每个函数都可以在内部调用一些错误处理程序。默认错误处理程序将错误写入控制台并调用abort()函数。这种行为对于托管库是不可取的,所以我想用我自己的默认错误处理程序替换它,这只会抛出一些异常,让程序在处理这个异常后继续正常执行。在调用任何包装函数之前,必须更改错误处理程序 包装器库是用托管c ++编写的,带有静态链接到包装库,因此不存在类似“带有数百个dll导入的类型”的情况。我也找不到包装器库中所有东西使用的单一类型。所以我无法通过在一个单一类型中定义静态构造函数来解决这个问题,它将执行我需要的代码。

我目前看到两种解决问题的方法:

  1. 定义一些静态方法,如Library.Initialize(),在他的代码使用包装器库的任何部分之前,必须由客户端调用一次。

  2. 找到每个顶级函数使用的最小类型子集(我认为这个子集的大小将类似于25-50种类型)并添加静态构造函数,调用Library.Initialize(将对于这些类型中的每一种都是这种情况的内部。

  3. 我已阅读thisthis个问题,但他们没有帮助我。有没有正确的方法来解决这个问题?也许有一些不错的黑客?

3 个答案:

答案 0 :(得分:1)

其他一些建议:

  1. 创建一个抽象基类作为所有包装类的根,并将initialize调用放在基类的构造函数中。
  2. 为所有对象提供内部构造函数,并强制客户端通过某种工厂方法实例化它们,然后在返回对象实例之前执行初始化。

答案 1 :(得分:0)

我认为你的选择2更好。如果你将呼叫包括在一些额外的类型中,那就这样吧。当然,如果已经调用了Library.initialize,你将会被淘汰。

答案 2 :(得分:0)

可能有点延伸,但您可以创建自己的包装类,只显示您想要的功能。在每个函数中,您都可以执行错误处理。