我有一个使用C#编译的Dll的VB6应用程序。我通过COM进行这项工作取得了成功。 但我的问题是,我有一个带有String和Double数据类型的Variant数组。我需要将此数组传递给我的C#Dll,它将数组作为Object接收。 因此,我需要做的就是将Variant数组转换为C#可以理解的Object数组。任何人有任何线索?将VB6变体分配到对象
1
A
回答
2
这应该做的伎俩
ArrayList a = new ArrayList(YourObjectArrayHere);
2
这必须从事物C#侧做的权利;如果不是这样,那么从VB6中可以做的事情就不多了。这就是说,在默认情况下,一种方法声明如下:
void Foo(object[] a);
将从VB6被视为服用Variant
的阵列(或上IDL水平,SAFEARRAY(VARIANT)
)。
如果它不适合你,那么你的C#声明有问题 - 请发布它们以便它们可以被检查。
0
对象[] System.Runtime.InteropServices.Marshal.GetObjectsForNativeVariants(IntPtr的aSrcNativeVariant,INT cVars)
您是否尝试过这种方法吗?
object[] result;
unsafe
{
pin_ptr<object> pinObj = &obj;
result = Marshal.GetObjectsForNativeVariants(new IntPtr(pinObj), objSize);
}
自己没有尝试过,但似乎它会做的伎俩。
0
这是C#函数声明:
public double[][] CalcMatching(object[][] data1, object[][] data2, long dataLen1, long dataLen2, string matchingType)
这是VB6呼叫:
result = matchingCalcObj.CalcMatching(data1, data2, dataLen1, dataLen2, Matching)
其中data1
和data2
是变体的阵列。
我不认为我可以在C#上做很多事情,就像你们说的那样,一旦我在函数调用中得到的错误是“无效的过程调用或参数”。 VB6方面的任何选项?
感谢所有的答复。
相关问题
- 1. 在VB6中分配对象
- 2. 分配对象到变量
- 3. 将JSON对象值分配给变量
- 4. 将保留对象分配给弱属性;对象将分配
- 5. 将对象分配给对象Java
- 6. 通过sagetex和Sweave将Sage变量值分配到R对象
- 7. 将对象分配给button.tag
- 8. VB6变体类型
- 9. 变量分配和变化分配的对象
- 10. 客体C枚举类型在重新分配对象变化
- 11. 分配对象时分配
- 12. 如何将一对多关系对象分配给变量?
- 13. VB6对象变量未设置
- 14. VB6检查变量是否为对象
- 15. 自动引用计数问题:将保留对象分配给unsafe_unretained变量;对象将分配
- 16. 将变量分配到行
- 17. 对象分配
- 18. 对象分配
- 19. VB6将数据分配给数据库中的变量
- 20. 分配对象的一类可变
- 21. 分配一个对象引用变量
- 22. JSON对象内存分配vs变量
- 23. 分配可变数量的新对象
- 24. 对象分配与动态变量
- 25. 迭代对象分配的变量
- 26. 在java中分配对象给变量
- 27. 分配变量对象蟒蛇
- 28. 访问对象和分配变量
- 29. 将方法体动态地重新分配给对象
- 30. 无法分配到结构体变量