【发布时间】:2009-08-19 19:46:21
【问题描述】:
我正在编写一个 Visual Studio 插件,需要将一个托管的 CodeElements 对象编组为它的非托管形式。我只需要内存中的指针,因为我可以将它转换为非托管端的 CodeElement。
[DllImport("CodeMethodsToString.dll")]
private static extern BSTR* CodeMethodsToString(void* functionObject);
public static void CodeMethodsToXML(XmlElement parent, CodeElements elements)
{
//Call CodeMethodsToString: how do I marshall CodeElements to an IntPtr?
//set XmlElement in here
}
我知道如何处理 XML,并且我在 C# 中有一个工作版本。我创建了非托管 DLL,因为在最低级别的递归调用所有各种成员变量会降低程序的速度。我只需要知道如何使用 System.Runtime.Interop.Marshal 将 CodeElements 对象转换为指向内存中 COM 对象的指针。
谢谢。
【问题讨论】:
-
DTB 似乎接近答案,但它似乎没有正确编组指针。获取对象引用未设置为对象实例或受保护的内存错误,仍需要通过编组进行更改。
标签: c# c++ com marshalling com-interop