我的项目即将使用我正在处理的软件控制设备。为此,供应商提供了一个COM库。调用此库中的一个方法时遇到问题:
在COM库的(遗憾的是很快写的)文档中,我必须调用的方法定义如下:
Xclass *GetDeviceInterface(BSTR p_SerialNumber)
但是:Visual Studio总是告诉我必须在这个方法中添加一个字符串:
public virtual Xclass GetDeviceInterface(string p_SerialNumber)
因此,如果我将Device的序列号作为字符串而不是BSTR插入,我只能编译我的程序。出于测试目的,我在if情况下调用此方法(我只是检查是否返回了某些内容)。
IntPtr serialBstr = Marshal.StringToBSTR(serialNo);
if (obj1.GetDeviceInterface(Marshal.PtrToStringBSTR(serialBstr)) != null)
{
MessageBox.Show("fine");
}
但如果我这样做,我总会得到一个InvalidCastException:
System.InvalidCastException: Return argument has an invalid type. at System.Runtime.Remoting.Proxies.RealProxy.ValidateReturnArg(Object arg, Type paramType) at
System.Runtime.Remoting.Proxies.RealProxy.PropagateOutParameters(IMessage msg, Object[] outArgs, Object returnValue)
at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
at theUsedCOMLib.class1.getInterface(String serialNo) at MyProject.Form1.initialize() in path/to/my/file.cs:line 00
我认为它可以正常工作,如果我能用BSTR作为参数编译它。我可以以某种方式欺骗编译过程吗?或者只是忽略Visual Studio从库中读取的信息(说我需要这个方法的字符串)?
感谢您的帮助!