把你这部分程序 c++驱动程序库,及测试代码发出来,我测试一下 EMAIL : [email protected]
解决方案 »
- 请教一个.htaccess文件解析的问题
- 帮忙看看这段代码中用到的C#语法或特性
- DES\ECB算法加密解密的例子(C#)
- 有无一本书可以查C#的类、方法、属性,类似参考手册的?
- 如何做一个textbox和LISTBOX的组合控件(WEB)中
- C#中如何用TEXTBOX控件实现,自定义快捷键的方法!
- Visual Studio环境下Windows应用程序和智能设备有何异同?
- 我想在FORM1中按下按扭显示FORM2,怎么写呀?
- 我想开发一种像挂机似的 在网页上自动填表的软件 用什么好 请大家帮帮忙 ^^
- winform制作如下效果
- vs 2013 帮助查看器 一打开就未响应了。
- 为啥我的datagridview只能输入正整数?
[DispId(338)]
int AddOnePerson(object PersonInfo);//这个方法是VS自动生成的
改成:
[DispId(338)]
int AddOnePerson(Object PersonInfo);//这个方法是VS自动生成的http://mochou123456.blog.163.com/blog/static/4605764620100334325874/
http://stackoverflow.com/questions/1137838/system-argumentexception-variantwrappers-cannot-be-stored-in-variants看看这样可不可以
请问一下你调用代码里面的vv是不是TPersonInfo数据类型的?因为这点代码中的tPersion, o和VariantWrapper有点孤立,所以不知道他们之间的关系到底是什么。因为虽然AddOnePerson函数的参数是object,但是它需要的还是TPersonInfo结构,所以猜想会不会是vv不是TPersonInfo结构,在程序从vv转换为TPersonInfo的过程中失败,才出现了你上面描述的错误。如果能把你调用的代码稍微详细的贴出来,至少能看出各个变量的类型和关系,可以帮助查找原因和解决方法。
请问一下你调用代码里面的vv是不是TPersonInfo数据类型的?因为这点代码中的tPersion, o和VariantWrapper有点孤立,所以不知道他们之间的关系到底是什么。因为虽然AddOnePerson函数的参数是object,但是它需要的还是TPersonInfo结构,所以猜想会不会是vv不是TPersonInfo结构,在程序从vv转换为TPersonInfo的过程中失败,才出现了你上面描述的错误。如果能把你调用的代码稍微详细的贴出来,至少能看出各个变量的类型和关系,可以帮助查找原因和解决方法。
帖子里可能写错了调用: TPersonInfo tPerson = new TPersonInfo(); VariantWrapper vv = new VariantWrapper(tPerson); int iii = client.AddOnePerson(vv);调用时候就出错 了,提示“System.ArgumentException: VariantWrappers 不能存储在 Variant 中。 在 System.StubHelpers.ObjectMarshaler.ConvertToNative(Object objSrc, IntPtr pDstVariant)”
如果我直接这样调用 int iii = client.AddOnePerson(tPerson );会提示另外一个错误"值不在预期范围"
请问一下你调用代码里面的vv是不是TPersonInfo数据类型的?因为这点代码中的tPersion, o和VariantWrapper有点孤立,所以不知道他们之间的关系到底是什么。因为虽然AddOnePerson函数的参数是object,但是它需要的还是TPersonInfo结构,所以猜想会不会是vv不是TPersonInfo结构,在程序从vv转换为TPersonInfo的过程中失败,才出现了你上面描述的错误。如果能把你调用的代码稍微详细的贴出来,至少能看出各个变量的类型和关系,可以帮助查找原因和解决方法。
帖子里可能写错了调用: TPersonInfo tPerson = new TPersonInfo(); VariantWrapper vv = new VariantWrapper(tPerson); int iii = client.AddOnePerson(vv);调用时候就出错 了,提示“System.ArgumentException: VariantWrappers 不能存储在 Variant 中。 在 System.StubHelpers.ObjectMarshaler.ConvertToNative(Object objSrc, IntPtr pDstVariant)”
如果我直接这样调用 int iii = client.AddOnePerson(tPerson );会提示另外一个错误"值不在预期范围"我看PersonInfo结构厂商Demo中定义PersonInfo中的long类型,你在C#中转成int,比如long PersonnelID你用的是public int PersonnelID,这个会不会有影响?
请问一下你调用代码里面的vv是不是TPersonInfo数据类型的?因为这点代码中的tPersion, o和VariantWrapper有点孤立,所以不知道他们之间的关系到底是什么。因为虽然AddOnePerson函数的参数是object,但是它需要的还是TPersonInfo结构,所以猜想会不会是vv不是TPersonInfo结构,在程序从vv转换为TPersonInfo的过程中失败,才出现了你上面描述的错误。如果能把你调用的代码稍微详细的贴出来,至少能看出各个变量的类型和关系,可以帮助查找原因和解决方法。
帖子里可能写错了调用: TPersonInfo tPerson = new TPersonInfo(); VariantWrapper vv = new VariantWrapper(tPerson); int iii = client.AddOnePerson(vv);调用时候就出错 了,提示“System.ArgumentException: VariantWrappers 不能存储在 Variant 中。 在 System.StubHelpers.ObjectMarshaler.ConvertToNative(Object objSrc, IntPtr pDstVariant)”
如果我直接这样调用 int iii = client.AddOnePerson(tPerson );会提示另外一个错误"值不在预期范围"我看PersonInfo结构厂商Demo中定义PersonInfo中的long类型,你在C#中转成int,比如long PersonnelID你用的是public int PersonnelID,这个会不会有影响?
不会,C++里的long类型32位的,对应C#就是int32
{
long PersonnelID;
long DeptID;
long GroupID; <--C#结构中未声明
请问一下你调用代码里面的vv是不是TPersonInfo数据类型的?因为这点代码中的tPersion, o和VariantWrapper有点孤立,所以不知道他们之间的关系到底是什么。因为虽然AddOnePerson函数的参数是object,但是它需要的还是TPersonInfo结构,所以猜想会不会是vv不是TPersonInfo结构,在程序从vv转换为TPersonInfo的过程中失败,才出现了你上面描述的错误。如果能把你调用的代码稍微详细的贴出来,至少能看出各个变量的类型和关系,可以帮助查找原因和解决方法。
帖子里可能写错了调用: TPersonInfo tPerson = new TPersonInfo(); VariantWrapper vv = new VariantWrapper(tPerson); int iii = client.AddOnePerson(vv);调用时候就出错 了,提示“System.ArgumentException: VariantWrappers 不能存储在 Variant 中。 在 System.StubHelpers.ObjectMarshaler.ConvertToNative(Object objSrc, IntPtr pDstVariant)”
如果我直接这样调用 int iii = client.AddOnePerson(tPerson );会提示另外一个错误"值不在预期范围"我看PersonInfo结构厂商Demo中定义PersonInfo中的long类型,你在C#中转成int,比如long PersonnelID你用的是public int PersonnelID,这个会不会有影响?
不会,C++里的long类型32位的,对应C#就是int32另外一个数据类型wchar_t,在PersonInfo结构厂商Demo中定义PersonInfo中是有长度的,你使用的是UnmanagedType.LPWStr,MSDN定义是UnmanagedType.LPWStr: 指向以 null 终止的 Unicode 字符数组的指针。
另外还有一个是
UnmanagedType.ByValTStr: 定长的字符数组;数组的类型由包含数组的结构的字符集确定。在下面的这个MSDN链接中,它把没有长度的转成UnmanagedType.LPWStr,有长度的转成UnmanagedType.ByValTStr
http://msdn.microsoft.com/en-us/library/ms172512(v=vs.90).aspx如果还没有找到其他原因,那就再试试改下这个
请问一下你调用代码里面的vv是不是TPersonInfo数据类型的?因为这点代码中的tPersion, o和VariantWrapper有点孤立,所以不知道他们之间的关系到底是什么。因为虽然AddOnePerson函数的参数是object,但是它需要的还是TPersonInfo结构,所以猜想会不会是vv不是TPersonInfo结构,在程序从vv转换为TPersonInfo的过程中失败,才出现了你上面描述的错误。如果能把你调用的代码稍微详细的贴出来,至少能看出各个变量的类型和关系,可以帮助查找原因和解决方法。
帖子里可能写错了调用: TPersonInfo tPerson = new TPersonInfo(); VariantWrapper vv = new VariantWrapper(tPerson); int iii = client.AddOnePerson(vv);调用时候就出错 了,提示“System.ArgumentException: VariantWrappers 不能存储在 Variant 中。 在 System.StubHelpers.ObjectMarshaler.ConvertToNative(Object objSrc, IntPtr pDstVariant)”
如果我直接这样调用 int iii = client.AddOnePerson(tPerson );会提示另外一个错误"值不在预期范围"我看PersonInfo结构厂商Demo中定义PersonInfo中的long类型,你在C#中转成int,比如long PersonnelID你用的是public int PersonnelID,这个会不会有影响?
不会,C++里的long类型32位的,对应C#就是int32另外一个数据类型wchar_t,在PersonInfo结构厂商Demo中定义PersonInfo中是有长度的,你使用的是UnmanagedType.LPWStr,MSDN定义是UnmanagedType.LPWStr: 指向以 null 终止的 Unicode 字符数组的指针。
另外还有一个是
UnmanagedType.ByValTStr: 定长的字符数组;数组的类型由包含数组的结构的字符集确定。在下面的这个MSDN链接中,它把没有长度的转成UnmanagedType.LPWStr,有长度的转成UnmanagedType.ByValTStr
http://msdn.microsoft.com/en-us/library/ms172512(v=vs.90).aspx如果还没有找到其他原因,那就再试试改下这个
结构里类型什么的,我都已经试遍了。
现在关键是不知道问题所在,或许调用的时候哪个地方有稍稍不同。
int iii = client.AddOnePerson(ref vv);
不应该用微软提供的VariantWrapper,直接使用Marshal.StructToInptr就行。