我正在编写一个Visual Studio外接程序来处理C++代码,我认为COM互操作使我的速度慢了很多。因此,我希望将对COM对象的C#引用传递给一个小的C++动态链接库,让该动态链接库执行必要的计算并返回一个字符串。
我将把一个CodeFunction2对象传递给DLL,并获得一个包含该方法信息的XML字符串。
虽然欢迎你质疑我是否真的需要这样做来提高性能,但如果你在COM互操作中调用一打成员变量来访问数千个方法,那么在托管和非托管代码之间切换似乎会消耗太多的时间。
如何格式化C++动态链接库的参数?一般来说,我没有从托管代码调用非托管代码的经验,但我需要回答的主要问题是如何格式化调用。
发布于 2009-08-12 19:30:14
也许您应该改为编写托管C++ dll (使用/clr开关),然后您可以直接将托管对象传递到C++ dll中,并执行您喜欢的任何COM魔术,而不必担心在dll之间传递它们。
发布于 2009-08-12 23:31:42
如果你真的认为C# / COM互操作正在拖慢你的速度,为什么不在C++中编写你的VS插件呢?这将避免必须从C#外接程序dll传递到C++ dll来处理COM互操作-在同一位置完成所有这些操作。
发布于 2009-08-12 23:36:54
正如其他人所指出的那样,托管C++将是一个好主意,因为它使互操作变得非常容易。如果你决定使用它,而不是托管C++,我建议使用C++/CLI,它在功能上是相同的,但它更新,语法更简洁(它旨在取代托管CLI)。(在托管C++中,你有像__gc这样丑陋的东西)。
Here是一个关于互操作场景的很好的教程。
https://stackoverflow.com/questions/1268216
复制相似问题