Tag: safearray

E_NOINTERFACE在尝试获取类方法指针时

我正在从C ++非托管代码中调用C#方法。 我从数组中返回的类实例获取值时遇到问题。 我已经简化了一些代码 这是有问题的方法。 [return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_UNKNOWN)] public ScOrder[] GetOrders() { return new ScOrder[] { (new ScOrder(1), (new ScOrder(2) }; } 这是IScOrder接口 [ComVisible(true)] [Guid(“B2B134CC-70A6-43CD-9E1E-B3A3D9992C3E”)] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] public interface IScOrder { long GetQuantity(); } 这就是ScOrder的实现 [ComVisible(true)] [Guid(“F739759E-4D00-440E-B0B7-69AAF97FCB6D”)] [ClassInterface(ClassInterfaceType.None)] public class ScOrder { private long quantity = 0; public ScOrder() {} public ScOrder(long quantity) { […]

将IUnknowns的SAFEARRAY转换/转换为可迭代的接口指针数组

我在C#中有以下接口,其中一个具有相同名称的类(没有我)实现它。 [ComVisible(true)] [Guid(“B2B134CC-70A6-43CD-9E1E-B3A3D9992C3E”)] public interface IOrder { long GetQuantity(); long GetOrderType(); long GetPositionType(); } 公共类Order的实现:IOrder只有三个私有字段和一个带有3个参数的构造函数。 在其他地方,我有以下方法,结果我想在C ++非托管代码中工作,通过COM和.tlb / .tlh文件传输。 public ScOrder[] GetOrders() { //constant return value for simplicity return new Order[] { new Order(1, 2, 3), new Order(4, 5, 6) }; } 我已经设法使用C#托管代码在C ++非托管代码之间进行基础工作。 但是类arrays被certificate是一个不同的挑战…… 我承认,对我来说,COM是新的,残酷的混淆和C ++很久以前被遗忘……但是我正在开发这两个库,所以我不放弃; 我希望C ++ DLL作为一些程序和我的C#代码之间的代理。 澄清:我既不使用MFC也不使用ATL。 我在C ++代码中使用#import来获取C#生成的接口和类指针以及其他我还不太了解的COM内容。 经过一个小时的研究,我只是去这里寻求帮助>。< 以下是我想要实现的C […]

如何在C ++中创建和初始化双精度SAFEARRAY以传递给C#

我需要从C ++调用我的C#方法 最初我的C#方法接受double []类型的参数,但是当从C ++调用时它变成了SAFEARRAY 在C ++中,我需要从双精度数组中获取数据,并填充SAFEARRAY。 我没有找到任何示例代码来执行此操作。 任何帮助表示赞赏