我们正在使用NET的第三方COM API。目前Visual Studio&可能TLBIMP用于生成Interop包装器DLL。
提供给NET的一种特定方法的生成接口不是我们更喜欢使用的接口。是否可以更改COM互操作代码,以便提交给NET的方法签名不同?我们无法更改COM接口或使用的TLB,因为它是第三方代码。
实际示例如下:
有问题的方法是传递明文密码。目前的代码如下:
步骤2& 3我想避免。我无法改变第三方API处理明文密码这一事实,但我至少希望我们控制的代码能够最大限度地减少内存中明文的存在。
我想更改.NET方法的签名以获取SecureString而不是String - NET已经可以将SecureString编组到BSTR,因此COM互操作代码仍然可以向实际的COM API提供相同的数据,但没有创建一个字符串的可怕步骤。可以这样做吗?
答案 0 :(得分:1)
是的,但您需要手动编写互操作界面的代码,然后您可以根据需要更改参数类型。
我可能会首先使用tlbimp创建互操作程序集。然后我将使用Reflector对其进行反编译并将这些源放在一个单独的类库项目中,根据需要修改接口并将此程序集用作interop程序集。