问题描述
我在使用 C# 调用 OCX 方法时遇到问题。 OCX组件是用C++开发的。
我收到此错误:
"System.Runtime.InteropServices.COMException (0x80020005): Los tipos
no coinciden. (Excepción de HRESULT: 0x80020005
(disP_E_TYPEMISMATCH))\r\n en
System.RuntimeType.ForwardCallToInvokeMember(String memberName,BindingFlags flags,Object target,Int32[] aWrapperTypes,MessageData&
msgData)\r\n en
MFCActiveXControl1Lib._DMFCActiveXControl1.LeoCadena(IntPtr
nombreFichero,IntPtr contenidoFichero,Int32 LongitudFichero)\r\n
en AxMFCActiveXControl1Lib.AxMFCActiveXControl1.LeoCadena(IntPtr
nombreFichero,Int32 longitudFichero) en
c:\\Temp\\PrinterManager\\Test\\MFCActiveXControl1\\Debug\\AxMFCActiveXControl1Lib.cs:línea
43\r\n en TestPrinterManager.Form1.button2_Click(Object sender,EventArgs e) en
C:\\Temp\\PrinterManager\\Test\\TestPrinterManager\\TestPrinterManager\\Form1.cs:línea
77"
C++ 签名是:
*void flushFiles();
LONG LeoCadena(unsigned char * nombreFichero,unsigned char * contenidoFichero,int LongitudFichero);*
我修改了生成的 Visual Studio 包装器,以便导出的方法是:
IL 文件:
*void flushFiles()
int32 LeoCadena(native int nombreFichero,native int contenidoFichero,int32 LongitudFichero)*
cs 文件:
*public virtual void flushFiles()
public virtual int LeoCadena(system.intPtr nombreFichero,system.intPtr contenidoFichero,int
longitudFichero)*
*string file_xml = @"C:\proyectos\fichero.xml";
string texto_xml;
System.IO.StreamReader sr = new System.IO.StreamReader(file_xml);
texto_xml = sr.ReadToEnd();
sr.Close();
sr.dispose();
byte[] arr = Encoding.ASCII.GetBytes(texto_xml);
int longitud = arr.Length;
IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(byte)) * arr.Length);
Marshal.copy(arr,ptr,longitud);
axMFCActiveXControl1.LeoCadena(ptr,longitud);
Marshal.FreeHGlobal(ptr);*
你知道我为什么会收到这个错误吗?
我使用 32 位平台和 .Net Framework 4.5.2
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)