c++ com:
STDMETHODIMP XXX::testVariant(VARIANT v)
{
//这里什么都没做
}c#:
comClass OBJ = new comClass();
object o = new object();
OBJ.testVariant(o);//这里报错 Attempted to read or write protected memory. This is often an indication that other memory is corruptVARIANT不论是in还是out都出错,使用其他类型参数正常~
STDMETHODIMP XXX::testVariant(VARIANT v)
{
//这里什么都没做
}c#:
comClass OBJ = new comClass();
object o = new object();
OBJ.testVariant(o);//这里报错 Attempted to read or write protected memory. This is often an indication that other memory is corruptVARIANT不论是in还是out都出错,使用其他类型参数正常~
解决方案 »
- 1到9999,中含有1的数字
- 关于取sql server数据库中特定行的问题?
- 求高手指点 怎么执行二分查找 以及怎么用output 输出
- WindowsService中访问磁盘目录时默认使用什么帐户?
- 100分请了不够又加,;C# 的大文件上传与存入数据库问题!
- 请问一下在C#编程如何实现一表格里面的列表功能
- 100分求 LearnVisualStudio.Net 系列英文视频教学(upto)
- 正则不能匹配出所有符合要求的链接,看图片 谢谢!
- C#模拟登录网站后post get出现问题
- 求教,引用明明在还是提示命名空间不存在怎么解决?
- 求助如何实现公式的后台解析。
- 用过ezVidC60.ocx采集照片的哥们帮帮忙
一般情况下,解决办法如下:
对于传入参数和引用传递参数(ref参数),调用方(C#代码片段)应该创建正确类型的变量,然后放在参数表对应的位置;
对于传出参数(out参数)和返回参数,声明一个object类型的变量来接收,然后转换为正确的类型;
对于默认值参数(default参数),因为C#没有默认值机制(参考C#语言规范的方法重载说明部分),所以还是需要有传入值,这时应该用.NET的System.Reflection.Missing类的静态实例Value,C#的互操作程序会把它Marshal为不传参数。
为什么我传入一个object会报错呢?
不要实例化直接传送试试
STDMETHODIMP XXX::testVariant(VARIANT v)
{
//你试试在这里写点代码,然后将v传回去,看看可不可以
}
你在testVariant方法中没有使用v,假设你在testVariant方法中是将v当作int来使用,那托管程序就会将object转换为int来传递,所以你在testVariant方法中是将v具体使用为什么类型,你就使用与之相对应的类型就好了。